Как переместить курсор в моем модифицированном QSpinBox после каждого числа, введенного в PyQt4?

У меня есть этот класс 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» после ввода всех трех цифр «314».

Как мне убедиться, что курсор находится в правильном положении, чтобы я мог правильно вводить числа?

Я использую Windows XP SP3 с Python 2.7.3 (32 бита).


person Chris Aung    schedule 04.06.2014    source источник


Ответы (1)


Похоже, вы можете использовать параметр базового класса QAbstractSpinBox, отслеживание клавиатуры

если для этого параметра установлено значение false, он не будет выдавать сигнал valueChanged до того, как вы нажмете Enter, или виджет потеряет фокус.

Описание из документации Qt:

Если включено отслеживание клавиатуры (по умолчанию), счетчик выдает сигнал valueChanged(), пока новое значение вводится с клавиатуры.

Например. когда пользователь вводит значение 600, набирая 6, 0 и 0, счетчик выдает 3 сигнала со значениями 6, 60 и 600 соответственно.

Если отслеживание клавиатуры отключено, счетчик не выдает сигнал valueChanged() при наборе текста. Он излучает сигнал позже, когда нажата клавиша возврата, когда фокус клавиатуры потерян или когда используются другие функции счетчика, например. нажав клавишу со стрелкой.

документы pyqt здесь, как обычно, бесполезны.

person M4rtini    schedule 05.06.2014