from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(762, 590)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.checkBox = QtWidgets.QCheckBox('box', self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(150, 75, 181, 20))
self.checkBox.setObjectName("checkBox")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(150,160,100,20))
self.comboBox.addItem("Yes")
self.comboBox.addItem("No")
self.comboBox.setObjectName("comboBox")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "11"))
MainWindow.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Я создал поле со списком с «Да» и «Нет», я хочу скрыть флажок, когда выбираю «Нет» в поле со списком. Может ли кто-нибудь помочь?
Я попытался создать функцию, которая при self.comboBox.currentText == «Да» запускала self.checkBox.hide (), но это не сработало ...
Вы должны использовать сигнал currentTextChanged
, который уведомляет вас, если выбор QComboBox
был изменен, отправляя вам новый текст, тогда вы должны только сравнить его с текстом и вместе с методом setVisible()
выполнить ваше требование.
self.comboBox.currentTextChanged.connect(self.handle_current_text_changed)
def handle_current_text_changed(self, text):
self.checkBox.setVisible(text == "Yes")
Для этого используйте сигналы и слоты. Захватите сигнал editTextChanged Combobox с помощью слота hideCheckBox.
comboBox.currentTextChanged.connect(func)
В функции func
просто установите для параметраVisibility значение false, если текст имеет значение «NO», и значение true, если для текста указано значение «YES».
Если вы хотите скрыть флажок, когда состояние comboBox
- это, например, HIDE
, и показать checkBox
, когда состояние поля со списком - UNHIDE
, используйте конструкцию IF
, чтобы уловить состояние поля со списком. В зависимости от состояния примените к флажку то или иное значение:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(762, 590)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.checkBox = QtWidgets.QCheckBox('box', self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(150, 75, 181, 20))
self.checkBox.setObjectName("checkBox")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(150,160,100,20))
self.comboBox.addItem("UNHIDE")
self.comboBox.addItem("HIDE")
self.comboBox.setObjectName("comboBox")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.comboBox.currentTextChanged.connect(self.hidefunction) # code for connect to function below
def hidefunction(self):
text = str(self.comboBox.currentText())
# this is the state of the current text in combobox. Below simple IF block.
if text == "UNHIDE":
self.checkBox.setHidden(False)
# its HIDE - your checkBox when comboBox changed his state
else:
self.checkBox.setHidden(True)
# its HIDE your checkBox when comboBox changed his state
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "11"))
MainWindow.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())