1

我有这个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”从未输入过。相反,它在键入“314”的所有 3 位数字后显示“1043”。

如何确保将光标放置在正确的位置以便我正确输入数字?

我正在使用带有 Python 2.7.3(32 位)的 windows XP SP3

4

1 回答 1

1

似乎您可以使用基类QAbstractSpinBox的参数keyboardTracking

如果设置为 false,则在您按下 enter 之前它不会发出 valueChanged 信号,否则小部件会失去焦点。

Qt 文档中的描述:

如果启用键盘跟踪(默认),则微调框会在从键盘输入新值时发出 valueChanged() 信号。

例如,当用户通过键入 6、0 和 0 输入值 600 时,旋转框会发出 3 个分别具有值 6、60 和 600 的信号。

如果禁用键盘跟踪,则微调框在键入时不会发出 valueChanged() 信号。它稍后会在按下返回键、键盘焦点丢失或使用其他旋转框功能(例如按下箭头键)时发出信号。

pyqt 文档在这里像往常一样毫无用处。

于 2014-06-05T10:09:31.797 回答