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_()) 
+0

非常好。我不明白'self.setValidator(QRegExpValidator(QRegExp(“(\\ d +)”)))'部分虽然。 – Eduardo

+1

这个想法是验证输入,以便它只接受数字,因为它在默认情况下Qt提供了3个验证器,它们是QDoubleValidator,QIntValidator和QRegExpValidator,在这种情况下,尽管文本中有数字,但全文不是数字因此我们使用QRegExpValidator,它使用正则表达式进行验证(这些表达式具有特定的语法,但在其中,它表示数字是用dy设置的,以表示预期会有更多比一个字符se usa +)。 :P – eyllanesc