Bonjour,
Je constate un problème avec le signal editingFinished émit par une QLineEdit.
Selon la doc, le signal est émit lorsque la ligneEdit perd le focus ET lors d'une pression des touches Return et Enter
Dans l'exemple ci-dessous, on a un QPushButton destiné à rafraichir le contenu d'une comboBox et, dessous une ligneEdit.
A chaque fois que le signal editingFinished est émit le bouton émet aussi un signal clicked.
Remarques:
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
39
40
41
42 #!/usr/bin/env python # -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.resize(196, 87) self.gridLayout = QtGui.QGridLayout(Dialog) self.verticalLayout = QtGui.QVBoxLayout() self.horizontalLayout = QtGui.QHBoxLayout() self.comboBox = QtGui.QComboBox(Dialog) self.comboBox.addItems(["Alpha", "Beta", "Gamma"]) self.horizontalLayout.addWidget(self.comboBox) self.pushButton = QtGui.QPushButton(Dialog) self.pushButton.setMaximumSize(QtCore.QSize(25, 25)) self.pushButton.setText("R") self.horizontalLayout.addWidget(self.pushButton) self.verticalLayout.addLayout(self.horizontalLayout) self.lineEdit = QtGui.QLineEdit(Dialog) self.verticalLayout.addWidget(self.lineEdit) self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) self.pushButton.clicked.connect(self.on_button_clicked) self.lineEdit.editingFinished.connect(self.on_line_edited) Dialog.show() QtCore.QCoreApplication.processEvents() print ("Running, button has focus: ", self.pushButton.hasFocus()) def on_button_clicked(self): print ("Refresh clicked. Button has focus: ", self.pushButton.hasFocus()) def on_line_edited(self): print ("Editing line finished. Line has focus: ", self.lineEdit.hasFocus()) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Dialog = QtGui.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) sys.exit(app.exec_())
Avec un QToolButton cela ne se produit pas.
Graphiquement, le bouton est "encadré" comme s'il avait le focus au lancement du script, alors qu'il ne l'a pas.
Si je déplace le focus sur un autre widget et qu'ensuite je remet le curseur dans la lineEdit, le bouton reprend cette apparence de focus.
Rajouterne change rien. En plus de faire double emploi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.lineEdit.returnPressed.connect(self.on_line_edited)
Il s'agit toujours du premier bouton dans l'ordre de création.
Bon, j'ai plusieurs pushButton, si je convertis le premier en toolButton, je ne fais que déplacer le problème vers le suivant.
Testé sous Linux
Python 2.6, Qt 4.6.2, PyQt4 4.7.2
et Python 3.2.2, Qt 4.8.0, PyQt4 4.9
Une idée ?
J'ai le sentiment d'un bug Qt, personnellement. Quoique un bug qui survit de la version 4.6.2 à 4.8.0 ce serait plus qu'étonnant.
Merci, de vos lumières.
Partager