假设我有两个QspinBox,如果我更新spinBox_1,第二个将显示两倍的值。如果我更新spinBox_2,第一个将显示该值的一半。使用on_valueChanged1
和on_valueChanged2
这两种方法以及与SIGNAL("valueChanged(int)")
的相互联系可以正常工作。 1中的更改调用方法更改2,然后更改并再次调用1。幸运的是,事情停在这里,因为因子2和1/2的选择有效,所以第二个值实际上没有改变。如果选择其他值,则会导致几乎无限的呼叫和召回。
解决这个问题的Pythonic方法是什么?在更改之后我会disconnect
再次SIGNAL
和connect
,还是有一个解决方案对我来说太明显了?
更新
使用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)
除了它正在发挥作用之外,这是最佳/最通用的解决方案吗?
答案 0 :(得分:0)
您不能将on_valueChanged拆分为仅检测对象上的手动(而非发信号)更改吗?
这样一来,如果你改变了spinBox_1,它的on_valueChanged1回调会发出spinBox_2信号的变化信号,但不会触发on_valueChanged2,从而避免了无限循环。