Bonjour à tous
Désolé pour le titre, je n'ai pas trouvé de formulation plus simple. Voilà mon souci: j'ai une application qui doit ouvrir une sous-fenêtre à son ouverture. Pour ce faire, je surcharge la méthode show() pour qu'elle affiche la sous-fenêtre quand la fenêtre principale s'ouvre => ça fonctionne super (exemple ci-dessous)
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 #!/usr/bin/env python3 # coding: utf-8 from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys # L'objet pour gérer ma fenêtre class myWidget(QDialog): # Constructeur def __init__(self, *args, **kwargs): # Appel méthode objet hérité super().__init__(*args, **kwargs) # __init() def show(self): print("show") super().show() self.__subWin() # show() def __subWin(self): QMessageBox.information(self, "sub", "Hello", QMessageBox.Ok) # class myWidget if __name__ == "__main__": app=QApplication(sys.argv) widget=myWidget() widget.show() sys.exit(app.exec_()) # if
Toutefois il existe plusieurs façons d'ouvrir un fenêtre (show, open, exec_). Obligé si je veux tout gérer de surcharger chacune de ces méthodes. Ca me convient moyennement
Il existe cependant une méthode showEvent() qui est appelée chaque fois que la fenêtre est ouverte. Je me dis "oh sympa, je n'ai qu'à la surcharger et quelle que soit mon ouverture, je passerai au final par cette méthode", donc acte
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 #!/usr/bin/env python3 # coding: utf-8 from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys # L'objet pour gérer ma fenêtre class myWidget(QDialog): # Constructeur def __init__(self, *args, **kwargs): # Appel méthode objet hérité super().__init__(*args, **kwargs) # __init() def showEvent(self, event): print(event) super().showEvent(event) self.__subWin() # showEvent() def __subWin(self): QMessageBox.information(self, "sub", "Hello", QMessageBox.Ok) # class myWidget if __name__ == "__main__": app=QApplication(sys.argv) widget=myWidget() widget.show() sys.exit(app.exec_()) # if
Ca marche... mais le souci c'est que la sous-fenêtre s'ouvre avant que la fenêtre principale s'affiche à l'écran. Pourtant j'ai bien veillé à appeler showEvent() du parent avant l'ouverture de la sous-fenêtre... mais rien n'y fait.
Je ne dis pas que c'est un problème super grave (de toute façon j'utilise quasiment toujours show() et/ou je peux surcharger aussi les autres) mais bon ça me titille quand-même car j'aimerais nien savoir s'il y a une solution pour que le showEent() du parent affiche d'abord le parent afin que le QDialog s'ouvre dans une application bien ouverte à l'écran.
Merci à tous.
Partager