2017-09-06 2 views
1

Avoir un qlineedit où un utilisateur tape un code de vérification. Je veux être en mesure d'espacer ces nombres automatiquement après 5 caractères exactement comme c'est le cas lors de l'activation de fenêtres où des tirets sont automatiquement ajoutés. Par exemplePyQt auto-espace caractères qlineedit

12345 67890 12345 67890 

Répondre

2

Si le nombre de chiffres est fixé la meilleure option est d'utiliser setInputMask(), dans votre cas:

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

Dans le cas où le nombre de lignes est variable, il est préférable de utiliser le signal textChanged et l'ajouter chaque fois que c'est nécessaire, en plus de ce qu'il est possible d'écrire, nous établissons un QValidator comme je le montrerai ensuite.

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

Très agréable. Je ne comprends pas le 'self.setValidator (QRegExpValidator (QRegExp (" (\\ d +) ")))). – Eduardo

+1

L'idée est de valider l'entrée pour qu'elle n'accepte que les chiffres, car Qt propose par défaut trois valideurs qui sont QDoubleValidator, QIntValidator et QRegExpValidator, dans ce cas bien qu'il y ait des nombres dans le texte, le texte complet n'est pas un nombre donc est mieux valorisé caractère par caractère, pour ce que nous utilisons QRegExpValidator, cela utilise une expression régulière pour la validation (ces expressions ont une syntaxe particulière, mais il indique que les chiffres sont définis avec dy pour indiquer qu'il est attendu qu'il y a plus qu'un caractère se usa +). : P – eyllanesc