0

2 つの QspinBoxes があり、spinBox_1 を更新すると、2 番目にこの値が 2 倍表示されるとします。spinBox_2 を更新すると、最初のものはこの値の半分を表示します。on_valueChanged1ここでは、 およびon_valueChanged2との相互接続のような 2 つの方法を使用すると問題なくSIGNAL("valueChanged(int)")動作します。Change in 1 は、change 2 のメソッドを呼び出します。次に change 2 は、変更して 1 を再度呼び出します。因数 2 と 1/2 の選択がうまくいき、2 番目の値は実際には変化しません。他の値を選択すると、事実上無限の呼び出しとリコールが発生します。

これを解決するPythonicの方法は何でしょうか。変更後にもう一度やり直しますかdisconnect、それとも解決策が明白すぎてわかりませんか?SIGNALconnect

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

on_valueChanged を分割して、オブジェクトの手動の (シグナルされていない) 変更のみを検出することはできませんか?

そうすることで、spinBox_1 を変更すると、その on_valueChanged1 コールバックは、spinBox_2 に変更を通知しますが、on_valueChanged2 をトリガーせず、無限ループを回避します。

于 2013-05-02T08:08:40.747 に答える