Почему в цикле if значение QLabel не меняется?
Почему при обычном присвоении текста QLabel меняется:
self.label.setText('привет')
А в цикле нет:
if self.ComboViborBluda.currentText() == 'Пицца': self.label.setText('привет')
Хочу написать программу, в которой есть QComboBox(ComboViborBluda) и QLabel (label_2).
В комбобоксе есть несколько значений: Пицца, Гамбургер, Суши.
Нужно реализовать такую штуку:
Основываясь на выборе из ComboViborBluda менять текст в label_2
Грубый пример:
Если пользователь выбрал "Пицца" - Текст label_2 заменить на 'привет'
У меня не получается, причину объяснил выше.
Код:
import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow
from first_project.project.design_project import Ui_MainWindow
class WayToTheDream(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.setupUi(self)
self.setWindowTitle('Way To The Dream!')
self.setFixedSize(1010, 800)
self.NazvanieBluda.setGeometry(QtCore.QRect(280, 350, 180, 21))
self.dish_lib()
def dish_lib(self):
if self.ComboViborBluda.currentIndex() == 'Гамбургер':
self.label_2.setText('привет')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = WayToTheDream()
ex.show()
sys.exit(app.exec_())
design_project.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1010, 800)
MainWindow.setStyleSheet("background-color: #F0F0F0;")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.ComboViborBluda = QtWidgets.QComboBox(self.centralwidget)
self.ComboViborBluda.setGeometry(QtCore.QRect(60, 310, 211, 22))
self.ComboViborBluda.setObjectName("ComboViborBluda")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(280, 370, 171, 131))
self.label_2.setText("")
self.label_2.setObjectName("label_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1010, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.ComboViborBluda.setItemText(0, _translate("MainWindow", "*Блюдо не выбрано*"))
self.ComboViborBluda.setItemText(1, _translate("MainWindow", "Гамбургер"))
self.ComboViborBluda.setItemText(2, _translate("MainWindow", "Пицца"))
self.ComboViborBluda.setItemText(3, _translate("MainWindow", "Салат \"Цезарь\""))
self.ComboViborBluda.setItemText(4, _translate("MainWindow", "Салат \"Греческий\""))
self.ComboViborBluda.setItemText(5, _translate("MainWindow", "Картошка Фри"))
self.ComboViborBluda.setItemText(6, _translate("MainWindow", "Картошка по-деревенски (Айдахо)"))
self.ComboViborBluda.setItemText(7, _translate("MainWindow", "Наггетсы"))
self.ComboViborBluda.setItemText(8, _translate("MainWindow", "Крылышки"))
self.ComboViborBluda.setItemText(9, _translate("MainWindow", "Соусы"))
self.ComboViborBluda.setItemText(10, _translate("MainWindow", "Торт \"Тирамису\""))
self.ComboViborBluda.setItemText(11, _translate("MainWindow", "Торт \"Наполеон\""))
self.ComboViborBluda.setItemText(12, _translate("MainWindow", "Роллы"))
self.ComboViborBluda.setItemText(13, _translate("MainWindow", "Суши"))
Ответы (1 шт):
Чтобы получать быстрые и правильные ответы, вы должны предоставлять минимально-воспроизводимый пример, который демонстрирует проблему.
Если вы этого не делаете, то не понятно о каком цикле вы говорите.
Все что вам надо, это использовать сигнал, например activated():
self.comboBox.activated.connect(self.comboActivated)
Этот сигнал отправляется, когда пользователь выбирает элемент в поле со списком.
Обратите внимание, что этот сигнал отправляется,
даже если выбор не изменен. Если вам нужно знать, когда выбор действительно изменится,
используйте сигнал currentIndexChanged() или currentTextChanged().
import sys
from PyQt5 import QtGui, QtCore, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.comboBox = QtWidgets.QComboBox()
self.comboBox.addItems(["Сделайте свой выбор:", "Пицца", "Гамбургер", "Суши"])
self.comboBox.activated.connect(self.comboActivated)
self.label = QtWidgets.QLabel()
layout = QtWidgets.QHBoxLayout(self.centralWidget)
layout.addWidget(self.comboBox)
layout.addWidget(self.label)
def comboActivated(self):
if self.comboBox.currentText() == 'Пицца':
self.label.setText(f'Привет `{self.comboBox.currentText()}`')
else:
self.label.clear()
if __name__=='__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.resize(300, 100)
window.show()
sys.exit(app.exec_())
Update
вот подправленный ваш main.py
...
class WayToTheDream(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
#? self.ui = Ui_MainWindow() # убрать !!!
self.setupUi(self)
self.setWindowTitle('Way To The Dream!')
self.setFixedSize(1010, 800)
#? NazvanieBluda self.NazvanieBluda.setGeometry(QtCore.QRect(280, 350, 180, 21))
# comboViborBluda !!!
self.ComboViborBluda.activated.connect(self.dish_lib)
#? self.dish_lib()
def dish_lib(self):
# if self.ComboViborBluda.currentIndex() == 'Гамбургер':
if self.ComboViborBluda.currentText() == 'Гамбургер': # ! currentText
self.label_2.setText('привет')
else: # +++
self.label_2.clear() # +++
...

