0

假设我有两个 QspinBoxes,如果我更新 spinBox_1,第二个将显示这个值的两倍。如果我更新 spinBox_2 第一个将显示该值的一半。使用on_valueChanged1andon_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)

因此,除了它正在工作之外,这是最好/最通用的解决方案吗?

4

1 回答 1

0

Can't you split on_valueChanged to only detect manual (and not signaled) changes on the objects?

That way if you alter spinBox_1, its on_valueChanged1 callback signals spinBox_2 to change, but doesn't trigger the on_valueChanged2, avoiding the inifinite loop.

于 2013-05-02T08:08:40.747 回答