要防止对象在给定上下文中发出信号,您必须使用blockSignals():
bool QObject.blockSignals (self, bool b)
如果 block 为真,则此对象发出的信号将被阻塞(即,发出信号不会调用与其连接的任何东西)。如果 block 为 false,则不会发生此类阻塞。
返回值是signalsBlocked() 的前一个值。
请注意,即使此对象的信号已被阻止,也会发出 destroy() 信号。
为了简化任务,该setCurrentIndex()方法将被覆盖。
class ComboBox(QComboBox):
def setCurrentIndex(self, ix):
self.blockSignals(True)
QComboBox.setCurrentIndex(self, ix)
self.blockSignals(False)
Run Code Online (Sandbox Code Playgroud)
下面的例子展示了它的用法:
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_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |