PYQT防止组合变化值



我有四个组合框框,其中 pyqt4 。如果用户更改第一个组合框中的值,则从第二个组合框中更改了值,并且如果第二个组合框中的值更改,则可以更改,这会导致第三组合框的更改以及第四个组合框的相同情况。我想要的是,当我更改值时,我第一个组合框时,它应该仅更改第二组合框,而不会影响第三和第四个组合框中的更改。如何在 pyqt

中执行此操作。

我有更改索引在每个组合框上设置事件。

要防止对象在给定上下文中发出信号,必须使用 blockSignals()

bool qobject.blocksignals(self,bool b)

如果块为真,则该对象发出的信号被阻止(即 发出信号不会调用与其连接的任何内容)。如果块 是错误的,不会发生这种阻塞。

返回值是SignalSblocked()的先前值。

请注意,即使信号也将发出破坏的()信号 因为该对象已被阻止。

要简化任务,setCurrentIndex()方法将被覆盖。

class ComboBox(QComboBox):
    def setCurrentIndex(self, ix):
        self.blockSignals(True)
        QComboBox.setCurrentIndex(self, ix)
        self.blockSignals(False)

以下示例显示了其用途:

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QVBoxLayout())
        l = [str(i) for i in range(5)]
        cb1 = ComboBox(self)
        cb1.addItems(l)
        cb2 = ComboBox(self)
        cb2.addItems(l)
        cb3 = ComboBox(self)
        cb3.addItems(l)
        cb4 = ComboBox(self)
        cb4.addItems(l)
        cb1.currentIndexChanged.connect(cb2.setCurrentIndex)
        cb2.currentIndexChanged.connect(cb3.setCurrentIndex)
        cb3.currentIndexChanged.connect(cb4.setCurrentIndex)
        self.layout().addWidget(cb1)
        self.layout().addWidget(cb2)
        self.layout().addWidget(cb3)
        self.layout().addWidget(cb4)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

我无法为您提供确切的代码>

可能类似这样的东西

Boolean flag3rdCombo  = false;
function onchangesecondCombo(){
    if (flag3rdCombo){
        return;
    }
    .....
}

最新更新