我有四个组合框框,其中 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;
}
.....
}