假设我有两个QspinBoxes,并且如果我更新spinBox_1,第二个将显示两倍这个值。如果我更新spinBox_2,第一个将显示这个值的一半。使用两种方法,如on_valueChanged1
和on_valueChanged2
以及与SIGNAL("valueChanged(int)")
的相互连接在这里可以正常工作。更改1调用方法更改2,然后更改并再次调用1。幸运的是,事情在这里停止,因为因子2和1/2的选择结束了,所以第二个值实际上不会改变。如果选择其他值,则会导致几乎无限的呼叫和召回。Pythonic的方式来避免相互连接的QObject中的无限循环
Pythonic将如何解决这个问题。请问我和connect
后disconnect
再次发生变化,还是有一个解决方案太明显,我看到?
更新 A和hasFocus()
剪断工作的例子看起来像:
QMainWindow.connect(self.ui.doubleSpinBox,SIGNAL("valueChanged(double)"),self.on_change1)
QMainWindow.connect(self.ui.doubleSpinBox_2,SIGNAL("valueChanged(double)"),self.on_change2)
def on_change1(self):
if self.ui.doubleSpinBox.hasFocus():
self.ui.doubleSpinBox_2.setValue(3.3*self.ui.doubleSpinBox.value())
def on_change2(self):
if self.ui.doubleSpinBox_2.hasFocus():
self.ui.doubleSpinBox.setValue(self.ui.doubleSpinBox_2.value()*.77)
因此,从一个事实,即它是工作分开,这是最好的/最通用的解决方案?
有趣的一点。你能做到吗?你会怎么做?我会用'hasFocus()'吗?另外'setUpdatesEnabled()'可能是一个选项。 – mikuszefski 2013-05-02 08:18:54
'hasFocus()'可能是一个安全的选择,因为只有用户调整的字段才有焦点。 'setUpdatesEnabled()'只影响绘图和更新,所以它可能不会阻止被调用的回调。 – Meoiswa 2013-05-02 08:30:45
这是我的印象看着类的参考“短时间禁用更新,例如为了避免屏幕闪烁”;所以'hasFocus()'会产生一个额外的if语句。 – mikuszefski 2013-05-02 08:37:59