Bonjour,
Je suis en train de développer une appli Python (3.6.8) avec tkinter (8.6).
J'essaie de faire une appli qui a une fenêtre principale et ouvre des sous-fenêtres "toplevel" (jusque 2 niveaux en cascade au total)
Pas de problème pour les Toplevel. Juste que je voudrais griser le bouton qui a appelé la sous-fenêtre dans le niveau d'avant.
Voici mon code. Est-ce qu'il y a moyen de faire plus élégant?
Je me demandais par exemple s'il n'y avait pas un moyen, depuis la fenêtre du niveau au dessus de savoir si la sous-fenêtre ouverte était toujours là et updater le bouton en fonction (je pourrais introduire une variable "état", mais je passe des variables entre objets, et ça revient finalement à la même chose, me semble-t-il).
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 import tkinter class MainGUI(object): def __init__(self,master): self.master=master self.master.protocol("WM_DELETE_WINDOW", self.quitte) self.fen=tk.Frame(self.master).grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W) # ... self.com=tk.Frame(self.master).grid(row=1,column=0, sticky=tk.N+tk.S+tk.E+tk.W) # ... self.ba=tk.Button(self.com,text="auto", command=self.win_automatic) self.ba.grid(row=0,column=1, sticky=tk.N+tk.S+tk.E+tk.W) # ... def quitte(self): self.master.destroy() def win_automatic(self, **kwargs): self.win2=tk.Toplevel(self.master, **kwargs) self.winauto=GUI_winauto(self.win2, self.ba) class GUI_winauto(object): def __init__(self,master, bouton, **kwargs): self.master=master self.bouton=bouton self.bouton.configure(state=tk.DISABLED) self.master.grab_set() #... def quitte(self): self.master.destroy() self.bouton.configure(state=tk.NORMAL) root=tk.Tk() gui=MainGUI(root) root.mainloop()
J'ai en tous cas testé un "bête":
mais évidemment, le bouton "ba" repasse immédiatement à l'état "normal" dès que la fenêtre est créée (pas fermée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 self.ba.configure(state=tk.DISABLED) self.win2=tk.Toplevel(self.master) self.ba.configure(state=tk.NORMAL)
Merci pour vos idées
Partager