PyQt auto-space qlineedit 字符

PyQt auto-space qlineedit characters

我有一个 qlineedit,用户可以在其中键入验证码。我希望能够每隔 5 个字符自动 space 这些数字,就像激活 windows 时自动添加破折号一样。 例如

12345 67890 12345 67890

如果位数是固定的,最好的选择是使用 setInputMask(),在您的情况下:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    le = QLineEdit()
    le.setInputMask(("ddddd "*4)[:-1])
    le.show()
    sys.exit(app.exec_())

在行数可变的情况下,最好使用 textChanged 信号并在必要时添加它,此外,我们可以编写一个 QValidator 作为我接下来显示。

class LineEdit(QLineEdit):
    def  __init__(self, *args, **kwargs):
        QLineEdit.__init__(self, *args, **kwargs)
        self.textChanged.connect(self.onTextChanged)
        self.setValidator(QRegExpValidator(QRegExp("(\d+)")))

    def onTextChanged(self, text):
        if len(text) % 6 == 5:
            self.setText(self.text()+" ")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    le = LineEdit()
    le.show()
    sys.exit(app.exec_())