如何在PyQt4中每输入一个数字后移动修改过的QSpinBox的光标?
我有一个叫做 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 文档 在这里通常也没什么用。