2016-05-29 16 views
0

第一個組合框包含貨幣A中的一個數字,第二個包含相同數量但貨幣B。我想要什麼:當我在第一個組合中輸入數字時,第二個數組必須自動設置爲轉換的數字在其他貨幣中,反之亦然。 我使用Ubuntu 16.04,Python 3.5.1,Qt 4.8.7。 2 QComboBox與Qt設計師 代碼創建的:如何根據對方設置2個QDoubleSpinBox?

@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是這將是在將來的可變的轉換因子。 min對於2個組合框爲0,最大值爲50000(遠高於實際最大值),步長爲1.0。 從dspPuAchEur到dspPuAchDT都能正常工作,但它在相反意義上工作不正常:步驟爲0.99代替1.當我嘗試手動編輯字段時,顯示的數字不是我剛輸入的數字。它總是減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

我忘了一件事: 很多tkanks,Martin – Grumeau