Bonjour à tous
J'ai remarqué que pour un QDialog, la touche "esc" le ferme sans le faire passer par un closeEvent
Exemple
Code python : 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
43
44
45 #!/usr/bin/env python3 # coding: utf-8 from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sys class myWindow(QDialog): def __init__(self, *args, **kwargs): super().__init__(*args, *kwargs) btn=QPushButton("quit", parent=self, clicked=self.close) layout=QHBoxLayout(self) layout.addWidget(btn) # __init__() def closeEvent(self, event): print( "%s => %s.closeEvent(%s)" % ( self.sender().__class__.__name__, self.__class__.__name__, "%s (%s)" % (event.__class__.__name__, type(event)), ) ) # Question if QMessageBox.question( self, "Confirmation", "Confirmez-vous vouloir quitter ?", QMessageBox.Yes|QMessageBox.No, ) != QMessageBox.Yes: event.ignore() return # if # Appel méthode objet hérité super().closeEvent(event) event.accept() # closeEvent() # class myWindow app=QApplication(sys.argv) d=myWindow() d.show() sys.exit(app.exec_())
On lance le programme, si on appuie sur "quit" ou la croix on passe par le closeEvent (et on a le choix de valider ou refuser). Mais si on appuie sur "esc" la fenêtre se ferme sans rien demander.
On peut bien entendu forcer le truc en rajoutant un keyPressEvent codé par exemple de cette façon
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def keyPressEvent(self, event): print( "%s => %s.keyPressEvent(%s)" % ( self.sender().__class__.__name__, self.__class__.__name__, "%s (%s)" % (event.__class__.__name__, type(event)), ) ) if event.key() == Qt.Key_Escape: self.close() return # if super().keyPressEvent(event) # keyPressEvent()
Mais quelqu'un (tyrtamos?) sait-il si ce comportement est voulu (et pourquoi) ou bien s'il s'agit d'une erreur de conception dans Qt? Surtout que ça ne vaut que pour un QDialog. Pour un QWidget, la touche "Esc" est inactive.
Merci à tous
Partager