Lecteurs de ce message, je vous salue.
Lorsque l'on démarre un logiciel quelconque, et que ce logiciel nous affiche une information au lancement (avertissement, mise à jour disponible, tutoriel ...), il se passe ceci :
- La fenêtre principale du logiciel s'ouvre mais est inactive
- Une pop-up s'ouvre nous affichant cette information
- On réalise une action sur cette pop-up qui se ferme
- La fenêtre principale se complète et redevient active
Donc, quelle est le moyen le plus propre de coder cela avec Tkinter ? (orienté objet)
J'ai répondu à cette question de la manière ci dessous, mais je ne suis pas sûr que ce soit le moyen le plus propre.
C'est avec "self.fenetre.wait_window(popup)" que je concrétise ce que je souhaite. Je choisi aussi d'utiliser "popup.transient(self.fenetre)" après avoir consulté cette discussion.
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 class MonProgramme: def __init__(self): self.fenetre = Fenetre() #Fenetre est une classe héritant de tk.Tk self.attente_popup() self.afficher_contenu() self.fenetre.mainloop() def attente_popup(self): popup = Popup(self.fenetre) # Popup est une classe héritant de tk.Toplevel popup.transient(self.fenetre) self.fenetre.wait_window(popup) def afficher_contenu(self): conteneur = Conteneur(self.fenetre, nom='conteneur') # Conteneur est une classe héritant de tk.Canvas conteneur.place(x=10, y=10)
Cependant je ne suis pas parfaitement satisfait, car je constate un ordre d'affichage biaisé, même s'il est très furtif :
- Ma fenêtre principale s'affiche (normal, je la créer en premier)
- Ma popup s'affiche (normal, je l'appelle par la suite)
- Ma fenêtre principale se ré-affiche par dessus ma popup (mais pourquoi ? mon mainloop ? mais il est après dans mon programme ...)
- Ma popup se ré-affiche par dessus ma fenêtre principale (normal puisque j'ai appelé la fonction .transient )
Le tout en à peine un quart de seconde mais ça me perturbe tout de même. Et je comprends par cet enchaînement que je n'ai pas choisi le moyen le plus propre de coder ça.
Je remercie les lecteurs de ce message pour les conseils apportés.
Partager