2017-09-06 15 views
1

ユーザーが確認コードを入力するqlineeditを持っています。私は、ダッシュが自動的に追加されるウィンドウをアクティブにするのと同じように、これらの数字を5文字後に自動的にスペースに入れたいと思っています。例PyQt自動スペースqlineedit文字

12345 67890 12345 67890 

答えて

2

については 桁数が固定されている場合は、最良のオプションは、あなたのケースでは、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はデフォルトでQDoubleValidator、QIntValidator、QRegExpValidatorの3つのバリデータを提供します。この場合、テキスト内に数字がありますが、フルテキストは数字ではありませんQRegExpValidatorを使用しているために、より良い値の文字があります。これは正規表現を使用して検証されます(これらの式は特定の構文を持ちますが、数字がdyで設定されていることを示しています1人のキャラクターがアメリカより+)。 :P – eyllanesc

関連する問題