当我们从另一个组合框中选择一个元素时,禁用一个Combobox

时间:2015-08-23 19:09:16

标签: python qt combobox pyqt4

使用PyQt4时,我想从另一个组合框中选择选项3时隐藏/禁用组合框。

我知道我们可以使用QComboBox.setEnabled(False)来隐藏/禁用组合框,但我不知道如何在我的代码中实现它。

我尝试使用信号槽编辑器在QT Designer中执行此操作,但是当我们选择任何特定元素时,没有选项可以从组合框发送信号。

这是GUI代码:

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_test_gui(object):
    def setupUi(self, test_gui):
        test_gui.setObjectName(_fromUtf8("test_gui"))
        test_gui.resize(400, 300)
        self.primarybox = QtGui.QComboBox(test_gui)
        self.primarybox.setGeometry(QtCore.QRect(30, 70, 69, 22))
        self.primarybox.setObjectName(_fromUtf8("primarybox"))
        self.primarybox.addItem(_fromUtf8(""))
        self.primarybox.addItem(_fromUtf8(""))
        self.primarybox.addItem(_fromUtf8(""))
        self.primarybox.addItem(_fromUtf8(""))
        self.primarybox.addItem(_fromUtf8(""))
        self.secondarybox = QtGui.QComboBox(test_gui)
        self.secondarybox.setGeometry(QtCore.QRect(210, 70, 69, 22))
        self.secondarybox.setObjectName(_fromUtf8("secondarybox"))
        self.secondarybox.addItem(_fromUtf8(""))
        self.secondarybox.addItem(_fromUtf8(""))
        self.secondarybox.addItem(_fromUtf8(""))
        self.secondarybox.addItem(_fromUtf8(""))

        self.retranslateUi(test_gui)
        QtCore.QMetaObject.connectSlotsByName(test_gui)

    def retranslateUi(self, test_gui):
        test_gui.setWindowTitle(_translate("test_gui", "Dialog", None))
        self.primarybox.setItemText(0, _translate("test_gui", "Comb1", None))
        self.primarybox.setItemText(1, _translate("test_gui", "option1", None))
        self.primarybox.setItemText(2, _translate("test_gui", "option2", None))
        self.primarybox.setItemText(3, _translate("test_gui", "option3", None))
        self.primarybox.setItemText(4, _translate("test_gui", "option4", None))
        self.secondarybox.setItemText(0, _translate("test_gui", "comb2", None))
        self.secondarybox.setItemText(1, _translate("test_gui", "element1", None))
        self.secondarybox.setItemText(2, _translate("test_gui", "element2", None))
        self.secondarybox.setItemText(3, _translate("test_gui", "element3", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    test_gui = QtGui.QDialog()
    ui = Ui_test_gui()
    ui.setupUi(test_gui)
    test_gui.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

QComboBox有一个信号currentIndexChanged。当用户在组合框中选择新选项时,它会被发出。新索引与信号一起传递。 如果新索引为2(也就是选项3),您可以将此信号连接到将禁用第二个组合框的函数

self.comboBox1.currentIndexChanged.connect(self.on_change)

def on_change(self, newIndex):
    if newIndex==2:
        self.comboBox2.setEnabled(False)