PyQt自动空间qlineedit字符
问题描述:
我有一个用户输入验证码的qlineedit。我希望能够在5个字符之后自动分隔这些数字,就像在激活自动添加破折号的窗口时一样。 例如PyQt自动空间qlineedit字符
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_())
非常好。我不明白'self.setValidator(QRegExpValidator(QRegExp(“(\\ d +)”)))'部分虽然。 – Eduardo
这个想法是验证输入,以便它只接受数字,因为它在默认情况下Qt提供了3个验证器,它们是QDoubleValidator,QIntValidator和QRegExpValidator,在这种情况下,尽管文本中有数字,但全文不是数字因此我们使用QRegExpValidator,它使用正则表达式进行验证(这些表达式具有特定的语法,但在其中,它表示数字是用dy设置的,以表示预期会有更多比一个字符se usa +)。 :P – eyllanesc