Bonjour,
J'aimerais que la perte de focus d'un QLineEdit déclenche une méthode pour traiter l'évènement.
J'y arrive, et la méthode est effectivement appelée, mais si le focus est effectivement déplacée sur le widget suivant, il en reste des morceaux sur le précédent: on a donc un caret sur le 2ème lineEdit, mais le 1er l'a toujours! Et si j'essaye de passer de l'un à l'autre avec tab, le texte du 1er line Edit reste sélectionné. Manifestement, il y a un problème.
Voilà un petit code simplifié (Python 2.7) qui montre le pb:
Il vient une petite fenêtre avec 2 QLineEdit. Vous rentrez quelque chose dans le 1er: 'azerty' par exemple. Et vous cliquez sur le 2ème QLineEdit.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import division import sys from PyQt4 import QtCore, QtGui class Fenetre(QtGui.QWidget): def __init__(self, parent=None): super(Fenetre, self).__init__(parent) self.setWindowTitle("Code test") # créer le lineEdit self.lineEdit = QtGui.QLineEdit(self) # faire que la perte de focus exécute la méthode focusOut self.lineEdit.focusOutEvent = self.focusOut # création d'un 2ème lineEdit self.lineEdit2 = QtGui.QLineEdit(self) # positionnement des 2 widget dans la fenêtre posit = QtGui.QGridLayout() posit.addWidget(self.lineEdit, 0, 0) posit.addWidget(self.lineEdit2, 1, 0) self.setLayout(posit) def focusOut(self, event): self.lineEdit2.setText(u"perte de focus") event.accept() if __name__ == "__main__": app = QtGui.QApplication(sys.argv) QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('plastique')) fen = Fenetre() fen.show() sys.exit(app.exec_())
La méthode affiche "perte de focus" comme prévu, mais un carret reste visible sur le 1er QLineEdit. Essayez ensuite de passer de l'un à l'autre avec tab.
Quelqu'un sait-il comment rendre cela normal, où est-ce un bug???
Merci d'avance.
Tyrtamos
Partager