2016-05-29 3 views
0

最初のコンボボックスは通貨Aの数字を保持し、2番目のコンボボックスは通貨Bの同じ金額を保持します。私が望むもの:1番目の数字を入力すると、2番目の数字は自動的に変換された数字他の通貨で、逆も同様です。 私はUbuntu 16.04、Python 3.5.1、Qt 4.8.7を使用しています。 2 QComboBoxのQt Designerの コードを使用して作成されていますQDoubleSpinBoxを2台ずつセットアップするにはどうすればいいですか?

@pyqtSignature("double") 
def on_dspPuAchEur_valueChanged(self, double): 
    """ updaye prAchatDT according to prAchatEur""" 
    self.dspPuAchDT.setValue(2.2*self.dspPuAchEur.value()) 

@pyqtSignature("double") 
def on_dspPuAchDT_valueChanged(self, double): 
    """ update prAchatEur according to prAchatDT""" 
    self.dspPuAchEur.setValue(self.dspPuAchDT.value()/2.2) 

2.2は、将来的には、変数になり換算係数です。 2コンボボックスの最小値は0、最大値は50000(実際の最大値をはるかに上回ります)、ステップは1.0です。 dspPuAchEurからdspPuAchDTまでうまく動作しますが、逆の意味では機能しません。ステップは1の代わりに0.99です。手動でフィールドを編集しようとすると、表示された数字は今入力した数字ではありません。それは常にマイナス1です(私が '5'キーを押すと、私は '4'を得ます)。

誰かがこの動作について考えていますか?ありがとう。

答えて

0

これは、両方のスピンボックスが「ピンポン」を演奏していることが原因だと思います。 dspPuAchDTの値を変更するとvalueChanged()が送出され、dspPuAchEurが更新され、次にvalueChanged()信号が送出され、dspPuAchDTが更新されます。丸めのため、入力した値はすぐに変更されるようです。回避策として

、あなたは可能性がblock emitting signalsピア・ウィジェット更新中:

@pyqtSignature("double") 
def on_dspPuAchEur_valueChanged(self, double): 
    """ updaye prAchatDT according to prAchatEur""" 
    self.dspPuAchDT.blockSignals(True); 
    self.dspPuAchDT.setValue(2.2*self.dspPuAchEur.value()) 
    self.dspPuAchDT.blockSignals(False); 

@pyqtSignature("double") 
def on_dspPuAchDT_valueChanged(self, double): 
    """ update prAchatEur according to prAchatDT""" 
    self.dspPuAchEur.blockSignals(True); 
    self.dspPuAchEur.setValue(self.dspPuAchDT.value()/2.2) 
    self.dspPuAchEur.blockSignals(False); 
+0

を信号を遮断したときにコンボが更新される間、それは正常に動作します。そして、実際には丸めに問題があるようです。換算係数が整数であれば問題ありません。 – Grumeau

+0

1つを忘れました: 多くのtkanks、Martin – Grumeau

関連する問題