如何在PyQt4中每输入一个数字后移动修改过的QSpinBox的光标?

1 投票
1 回答
1423 浏览
提问于 2025-04-18 08:32

我有一个叫做 QSpinBox 的类,经过修改后可以显示3位数字(包括零)。

class ThreeDigitSpinBox(QtGui.QSpinBox):
    def __init__(self, *args):
        QtGui.QSpinBox.__init__(self, *args)

    def textFromValue(self, value):
        return "%03d" % value

我遇到的问题是,每次我在这个控件上选择并删除现有的值后,再开始输入时,光标的位置会影响我输入的内容。

比如说,我刚刚把QSpinBox里的所有内容都删掉了,然后我想输入数字“314”。

(我用“|”来表示光标的位置)

当我输入“3”时,框里显示“003”,光标就在第一个0后面。 "0|03"。

接着我继续输入第二个数字“1”,SpinBox显示“103”,光标就在第二个数字后面。 "10|3"。

由于光标的位置不对,我想输入的数字“314”根本没输入进去。最后显示的却是“1043”,而不是我想要的。

我该怎么做才能确保光标放在正确的位置,这样我才能正确输入数字呢?

我使用的是Windows XP SP3,Python 2.7.3(32位)。

1 个回答

1

看起来你可以使用基类 QAbstractSpinBox 的一个参数,叫做 keyboardTracking

如果这个参数设置为 false,那么在你按下回车键或者这个控件失去焦点之前,它就不会发出值改变的信号。

以下是 Qt 文档中的描述:

如果启用了键盘跟踪(默认是启用的),那么在用户通过键盘输入新值时,spinbox 会发出 valueChanged() 信号。

举个例子,当用户输入值 600 时,分别输入 6、0 和 0,spinbox 会发出 3 个信号,值分别是 6、60 和 600。

如果禁用了键盘跟踪,spinbox 在输入时就不会发出 valueChanged() 信号。它会在稍后发出信号,比如当按下回车键、失去键盘焦点,或者使用其他 spinbox 功能时,比如按箭头键。

pyqt 文档 在这里通常也没什么用。

撰写回答