Bonjour à vous,
Je me tourne vers vous aujourd'hui car j'ai un petit soucis au niveau de mes QLineEdit. J'ai mis une vérification de données sur mes champs au moment ou ce dernier perd le focus. La vérification fonctionne bien et cela ce passe bien si le champ est rempli comme il faut.
Je place mon code de suite ce sera plus simple à expliquer je pense :
Le soucis est que si je ne remplis pas le champ comme il se doit voir pas du tout, et que je veuille changer de champ, mon programme plante. Je pense que cela viens du .setFocus(). Comme il redonne le focus au lineEdit dans lequel j’étais cela fais passer le lineEdit dans lequel j'ai cliqué par le FocusOut() lui aussi et cela doit me faire une boucle récursive entre les deux lineEdit...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 class MyQLineEdit(QtWidgets.QLineEdit): def __init__(self,parent=None,bigpapa=None): super(MyQLineEdit,self).__init__(parent) self.setMaximumSize(self.parent().maximumSize()) self.setMinimumSize(self.parent().minimumSize()) self.setObjectName(self.parent().objectName()) self.bigpapa=bigpapa def focusOutEvent(self,event=None): self.LineTextChanged(event) def LineTextChanged(self,event): try: #Si le champ n'est pas vide if self.text()!="": #Si le texte correspond à un nombre if DataEntryControler().IntegerControlerForEditLine(self.text()) or DataEntryControler().FloatControlerForEditLine(self.text()): self.bigpapa.UpdateIHM() super(MyQLineEdit,self).focusOutEvent(event) #Sinon garde le focus else: self.setFocus() except: e=sys.exc_info() print(e)
Est ce qu'il y a un moyen de faire en sorte que le lineEdit garde le focus sans passer par .setFocus(). Un truc du style rollback ou quelque choses comme ça ?
Edit: Je suis sous Python 3.6.5 et PyQt5
Edit 2 : Je viens de pensée à ça (comme quoi sa sert d'écrire son problème sur "papier" ^^), je transforme tout mes QLineEdit en MyQLineEdit au même moment avec un boucle for au moment de l'initialisation de ma fenêtre. Est ce que cela n'éviterait mon problème si je le fais à un autre moment, sur le signal textChanged par exemple ?
Partager