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:

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_())
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.
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