2

QLineEdit を作成し、それにカスタム QValidator をアタッチしました。fixup()QValidatorに関数を追加しようとしました。QLineEdit にテキストを入力すると、 が呼び出されvalidate()、次に が呼び出されfixup()、最後にvalidate()もう一度呼び出されますが、修正前のテキストのままです。私は何を間違えましたか?フィックスアップによって QLineEdit が更新されないのはなぜですか?

mylineedit = QtGui.QLineEdit()
mylineedit.setValidator(MyValidator())

class MyValidator(QtGui.QRegExpValidator):
    def __init__(self, parent=None):
        rx = QtCore.QRegExp('\\d+ m')
        super().__init__(rx, parent)

    def validate(self, text, pos):
        r = super().validate(text, pos)
        print(r)
        return r

    def fixup(self, text):
        if len(text) == 0:
            text = '0 m'
        else:
            text = text.strip() + ' m'
        print(text)
        return text

出力は次のようになります (「1」+ Enter キーを押すと):

(PySide.QtGui.QValidator.State.Intermediate, '1', 1)
1 m
(PySide.QtGui.QValidator.State.Intermediate, '1', 1)
4

2 に答える 2