Bonsoir à tous,
Je m'excuse par avance si ma question vous semble trivial, mais je me considère comme étant un (grand) débutant en Python.
J'ai effectué des recherches pour résoudre mon problème, autant ici que sur Stack Overflow, ainsi que mon moteur de recherche préféré. Sans résultat concluant !
Contexte : Je souhaite créer une application sur la base de différents formulaires, en passant de l'un à l'autre par le biais d'un menu. A chaque nouvelle "ouverture", le formulaire doit se réinitialiser.
J'ai trouvé plusieurs approches pour créer une application multiforme, mais une seule permettant cette réinitialisation. Je m'en suis donc inspiré pour la base.
Merci encore à wiztricks qui m'a aidé à franchir une étape.
Ma question porte ici sur un autre problème, pour lequel j'ai trouvé quelques pistes, sans arriver à les exploiter.
Si vous pouviez m'apporter réponse, ou tout au moins des pistes à suivre, je vous en serai redevable !
Mon programme est axé autour de plusieurs modules (limité à trois dans l'exemple ci-dessous). Un de ces module à vocation à regrouper un ensemble de fonctions ayant leur utilité sur différentes pages (Frames). Le but est évidemment de ne pas recopier cette fonction à chaque fois, à la fois pour un gain de place, mais aussi afin de faciliter la lecture et compréhension du code.
Certaines fonctions devront lister l'ensemble des objets/enfants de la page (avec "winfo_children" je pense ?), pouvoir récupérer leur valeur, ou alors modifier l'un des objet/enfant en particulier pour lui attribuer une valeur/le modifier.
Je n'arrive pas à créer le lien vers la page/Frame, moins encore les objets. Mais j'imagine que répondre au premier problème me permettra de résoudre également le second ?
Pour exemple, mon code, en trois modules :
Module : main
Module : Pages
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 import tkinter as tk from Pages import * class SampleApp(tk.Tk): def __init__(self): tk.Tk.__init__(self) self._frame = None self.switch_frame(StartPage) def switch_frame(self, frame_class): new_frame = frame_class(self) if self._frame is not None: self._frame.destroy() self._frame = new_frame self._frame.config(width=300, height=300) self._frame.pack() if __name__ == "__main__": app = SampleApp() app.geometry("300x300") app.mainloop()
Module : function
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 import tkinter as tk from function import * class StartPage(tk.Frame): def __init__(self, master): tk.Frame.__init__(self, master) tk.Label(self, text="This is the start page").place(relx=0.1, rely=0.1) tk.Button(self, text="Open page one", command=lambda: master.switch_frame(PageOne)).place(relx=0.1, rely=0.3) tk.Button(self, text="Open page two", command=lambda: master.switch_frame(PageTwo)).place(relx=0.1, rely=0.5) tk.Button(self, text="Do something", command=lambda: dosomething).place(relx=0.1, rely=0.7) my_entry = tk.Entry(self, name="txt_my_entry").place(relx=0.1, rely=0.9) class PageOne(tk.Frame): def __init__(self, master): tk.Frame.__init__(self, master) tk.Label(self, text="This is page one").place(relx=0.1, rely=0.1) tk.Button(self, text="Return to start page", command=lambda: master.switch_frame(StartPage)).place(relx=0.1, rely=0.3) tk.Button(self, text="Open page two", command=lambda: master.switch_frame(PageTwo)).place(relx=0.1, rely=0.5) tk.Button(self, text="Do something", command=lambda: dosomething).place(relx=0.1, rely=0.7) my_entry = tk.Entry(self, name="txt_my_entry").place(relx=0.1, rely=0.9) class PageTwo(tk.Frame): def __init__(self, master): tk.Frame.__init__(self, master) tk.Label(self, text="This is page two").place(relx=0.1, rely=0.1) tk.Button(self, text="Return to start page", command=lambda: master.switch_frame(StartPage)).place(relx=0.1, rely=0.3) tk.Button(self, text="Do something", command=lambda: dosomething).place(relx=0.1, rely=0.5) my_entry = tk.Entry(self, name="txt_my_entry").place(relx=0.1, rely=0.9)
En vous remerciant par avance pour vos lumières, pistes, idées,...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 import tkinter as tk def dosomething(): print("Here I want to get values from widgets in the active Frame") print("Ici, je veux récupérer les valeurs d'objets dans le cadre actif")
Bonne soirée à tous,
Partager