如何依赖彼此设置2个QDoubleSpinBox?

时间:2016-05-29 10:16:31

标签: python qt

第一个组合框持有一个货币A的数字,第二个组合持有相同的金额但是货币B.我想要的:当我输入第一个中的数字时,第二个必须自动设置为数字用其他货币换算,反之亦然。 我使用的是Ubuntu 16.04,Python 3.5.1,Qt 4.8.7。 2 QComboBox是使用Qt Designer创建的 代码:

@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个组合框,min为0,max为50000(远高于实际最大值),步长为1.0。 从dspPuAchEur到dspPuAchDT它工作得很好,但是它没有相反的意义:步骤是0.99代替1.当我尝试手动编辑字段时,显示的数字不是我刚输入的数字。它总是减1(如果我按'5'键,我得到'4')。

有人对这种行为有任何想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我认为这可能是因为两个旋转框都在播放"乒乓球"。 dspPuAchDT的值的变化导致它的valueChanged()信号被发出,这反过来更新dspPuAchEur,而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);