如何设置相互依赖的2 QDoubleSpinBox?

2024-04-25 22:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

第一个组合框以货币a表示数字,第二个组合框以货币B表示相同的金额。我想要的是:当我在第一个数字中输入一个数字时,第二个数字必须自动设置为转换成其他货币的数字,反之亦然。 我使用的是ubuntu16.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组合框的最小值为0,最大值为50000(远高于实际最大值),步长为1.0。 从dspPuAchEur到dspPuAchDT,它工作得很好,但它的工作原理并非相反:步长是0.99而不是1。当我尝试手动编辑字段时,显示的数字不是我刚刚输入的数字。它总是负1(如果我按“5”键,我得到一个“4”)

有人知道这种行为吗?谢谢


Tags: toselfondef货币数字qtdouble
1条回答
网友
1楼 · 发布于 2024-04-25 22:33:10

我想这可能是因为两个旋转框都在玩“乒乓球”。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);

相关问题 更多 >

    热门问题