使用comboBox中的信号禁用Pyqt中的QspinBox

时间:2015-02-19 07:19:53

标签: qt pyqt4

我将comboBox作为widget和QspinBox之一作为另一个widget。如果我们在comboBox小部件中更改可用选项,我想禁用QspinBox小部件。作为我在下面给出的代码中的示例,如果我将option_1从option_1更改为option_2,则需要禁用QspinBox小部件。那怎么能这样做.. ??任何有关示例的帮助将不胜感激。我的代码如下,

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_tri_combobox(object):
    def setupUi(self, tri_combobox):
        tri_combobox.setObjectName(_fromUtf8("tri_combobox"))
        tri_combobox.resize(686, 510)
        self.centralWidget = QtGui.QWidget(tri_combobox)
        self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
        self.comboBox = QtGui.QComboBox(self.centralWidget)
        self.comboBox.setGeometry(QtCore.QRect(50, 130, 221, 27))
        self.comboBox.setObjectName(_fromUtf8("comboBox"))
        self.comboBox.addItem(_fromUtf8(""))
        self.comboBox.addItem(_fromUtf8(""))
        self.spinBox = QtGui.QSpinBox(self.centralWidget)
        self.spinBox.setGeometry(QtCore.QRect(360, 130, 251, 27))
        self.spinBox.setObjectName(_fromUtf8("spinBox"))
        tri_combobox.setCentralWidget(self.centralWidget)
        self.menuBar = QtGui.QMenuBar(tri_combobox)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 686, 25))
        self.menuBar.setObjectName(_fromUtf8("menuBar"))
        tri_combobox.setMenuBar(self.menuBar)
        self.mainToolBar = QtGui.QToolBar(tri_combobox)
        self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
        tri_combobox.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtGui.QStatusBar(tri_combobox)
        self.statusBar.setObjectName(_fromUtf8("statusBar"))
        tri_combobox.setStatusBar(self.statusBar)

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

    def retranslateUi(self, tri_combobox):
        tri_combobox.setWindowTitle(_translate("tri_combobox", "tri_combobox", None))
        self.comboBox.setItemText(0, _translate("tri_combobox", "option_1", None))
        self.comboBox.setItemText(1, _translate("tri_combobox", "option_2", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    tri_combobox = QtGui.QMainWindow()
    ui = Ui_tri_combobox()
    ui.setupUi(tri_combobox)
    tri_combobox.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

您正在寻找Qt signals and slots的精彩世界。

在简单的代码术语中,这是当有人从comboBox中选择元素时要执行的代码。

def dropdownSelect(self, index):
    self.spinBox.setEnabled(not index)

当然,非玩具示例将使用更复杂的if语句系列,但总体思路是相同的。在这种情况下,索引0是第一个元素,1是option_1,等等。将此函数添加到您的Ui类。

现在通过将此行添加到setupUi来链接它:

    self.comboBox.currentIndexChanged.connect(self.dropdownSelect)

Here's关于此特定信号的文档。这里发生的是你告诉Qt当调整comboBox值时,你有一个特殊的处理函数。 Qt核心事件循环处理所有这些。信号是"模式",它告诉您哪些参数可以在您的插槽中访问。