Bonsoir à tous,
Je suis actuellement en apprentissage de Python , je souhaite réalisé une interface utilisateur pour l'emprunt et le retour de livres.
J'ai réalisé une première version qui fonctionne mais assez médiocre , et je voudrais ainsi améliorer l'interface.
Dans une première version , j'essaie d'ouvrir des frames à partir de classes dynamiques qui sont liées à des boutons sur une fenêtre principale , mais j'ai encore des erreurs
notamment avec tkinter(testMat.py) , ensuite je souhaite faire la même chose avec une liste déroulante, mais je bloque également (running.py) , pourriez-vous s'il vous plait
m'aider à avancer dans ce projet ?
testMat.py
running.py
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168 from abc import ABC , abstractmethod from tkinter import * from datetime import datetime from time import strftime class Category(ABC,Tk): def __init__(self,name,id): self.name=name self.id =id self.parent = "i'm a parent" Tk.__init__(self,self.parent) #self.controller = controller @abstractmethod def show(self): pass class ImplCategory(Category): # héritage multiple def _init_(self,name,id): super(Category) #self.name = name #self.id=id def show(self): Frame1 = Frame(self, borderwidth = 2 , relief =GROOVE, bg = "black") Button1 = Button(Frame1, text = "OK!", width = 10) Button1.pack() Frame1.tkraise() print("i'm a custom category") Mathematique = ImplCategory("Mathematique",0) Astrophysique = ImplCategory("Astrophysique",1) Electromagnetique = ImplCategory("Electromagnetique",2) class Fen_principale(Tk): def __init__(self, *args, **kwargs): Tk.__init__(self, *args, **kwargs) #creation du container qui représente la page de base container = Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0 , weight=1) container.grid_columnconfigure(0, weight=1) #===============================creation d'un menu et sous menu========================================= self.biblio_menu = Menu(self) self.sous_men = Menu(self.biblio_menu, tearoff=0) #creation d'un sous menu self.biblio_menu.add_cascade(label="Menu",menu=self.sous_men) # ajout du sous menu au menu self.sous_men.add_command(label="Quitter", command = self.quitter) # ajout des commandes self.sous_men.add_command(label="Connexion Admin", command = self.admin) self.biblio_menu.add_command(label="Information",command=self.helpp) self.biblio_menu.add_command(label="Retour", command = self.retour_livre) self.config(menu = self.biblio_menu) # permet de configurer le menu # le menu doit toujours être defini dans une fenetre de Tk , jamais dans un Frame... self.frames = {} for F in (BibliothequeUL,Mathematique,Astrophysique,Electromagnetique): page_name=F.__name__ frame = F(parent=container,controller=self) self.frames[page_name]= frame #faire apparaitre les pages au même endroit frame.grid(row=0, column=0, sticky="nsew") self.affich_fenetre("BibliothequeUL") def affich_fenetre(self,page_name): #affichage d'une fenêtre avec le nom donnee dans la fonction frame = self.frames[page_name] frame.tkraise() #======= definition des fonctions===================================== def admin(self): pass def retour_livre(self): pass def quitter(self): self.destroy() def helpp(self): print("please place your student card") class BibliothequeUL(Frame): def __init__(self, parent, controller): Frame.__init__(self,parent) self.controller = controller w,h = 800, 500 self.image = PhotoImage(file='female.png', master=self) self.canvas = Canvas(self, width = w, height = h, scrollregion = (0, 0, 1000,1000 )) self.canvas.pack(fill ="both" , expand=True) self.canvas.create_image((w//2 , h//2), image = self.image) self.logo = PhotoImage(file='logo1.png', master = self) logo_label= Label(self.canvas , image = self.logo) logo_label.place( y = 650) #===================création d'un scrollbar pour le canva=============================== #scl = Scrollbar(self.canvas, orient ="vertical") #scl.config(command = self.canvas.yview) #self.canvas.config(yscrollcommand = scl.set) #scl.pack(side ="right", fill="y" #creation d'un label et placement dans la page label1 = Label(self.canvas, text="Matieres" , font = 'corbel',fg='white',bg='#DAA520') label1.pack(side = "top" , fill = "x") #label1.grid(row = 0 , sticky ="nsew") #self.labPlace(label1) #===================creation des boutons============================ mathButton = Button(self.canvas, text ="Mathematiques", width = 30 ,command = Mathematique.show(),bg ="#DAA520") phyButton = Button(self.canvas, text ="AstroPhysique", width=30 ,command = Astrophysique.show() ,bg ="#DAA520") elecButton = Button(self.canvas, text ="Electromagnetisme", width =30, command = Electromagnetique.show(),bg ="#DAA520") #optButton = Button(self.canvas, text ="Optique",width=30, command =lambda: controller.affich_fenetre("Optique"),bg ="#DAA520") #===================placement des boutons avec l'instruction grid================= #mathButton.grid(row = 300 , sticky = E) #phyButton.grid(row =301 , sticky =E) #elecButton.grid(row = 302, sticky=E) #optButton.grid(row = 303, sticky = E) mathButton.place( x = 600 , y = 30) phyButton.place( x = 600 , y = 60) elecButton.place( x = 600 , y = 90) #optButton.place( x = 600 , y = 120) #====================Affichage de la date courante et du temps==================== Dframe = Frame(self.canvas, borderwidth = 2, relief = GROOVE, bg="black") Dframe.pack(side = "bottom") #label_date= Label(Dframe, text = "Date "+strftime('%Y-%m-%d' , datetime.now())) label_date = Label(Dframe , text = datetime.now().strftime('%Y-%m-%d %H:%M:%S')) label_date.pack() if __name__=="__main__": app = Fen_principale() app.title("Bibliothèque Universitaire") app.geometry("800x600+300+500") app.mainloop() #c = ImplCategory("tata") #c.mainloop() #c.show() #print(c.parent)
Bien Cordialement
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188 from abc import ABC , abstractmethod from tkinter import * from datetime import datetime from time import strftime class Category(ABC,Tk): def __init__(self,name,id): self.name=name self.id =id self.parent = "i'm a parent" Tk.__init__(self,self.parent) #self.controller = controller @abstractmethod def show(self): pass class ImplCategory(Category): # héritage multiple def _init_(self,name,id): super(Category) #self.name = name #self.id=id #=======================Listebox pour les livres==================================== liste1 = Listbox(self, width =50) for x in len(cat_tuple): liste1.insert(END, cat_tuple(x)) liste1.pack( side = "left" , fill ="y") #==========================scrollbar pour la page et la liste======================== list_scroll = Scrollbar(list_frame, orient ="vertical") list_scroll.config(command = liste1.yview) list_scroll.pack(side ="right", fill ="y") #===============configiration du scrollbar============================ liste1.config(yscrollcommand = list_scroll.set) def show(self): Frame1 = Frame(self, borderwidth = 2 , relief =GROOVE, bg = "black") Button1 = Button(Frame1, text = "OK!", width = 10) Button1.pack() Frame1.tkraise() print("i'm a custom category") Mathematique = ImplCategory("Mathematique",0) Astrophysique = ImplCategory("Astrophysique",1) Electromagnetique = ImplCategory("Electromagnetique",2) Electronique = ImplCategory("Electronique",3) Informatique = ImplCategory("Informatique",4) cat_tuple = (Mathematique, Astrophysique, Electromagnetique, Electronique, Informatique,) class Fen_principale(Tk): def __init__(self, *args, **kwargs): Tk.__init__(self, *args, **kwargs) #creation du container qui représente la page de base container = Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0 , weight=1) container.grid_columnconfigure(0, weight=1) #===============================creation d'un menu et sous menu========================================= self.biblio_menu = Menu(self) self.sous_men = Menu(self.biblio_menu, tearoff=0) #creation d'un sous menu self.biblio_menu.add_cascade(label="Menu",menu=self.sous_men) # ajout du sous menu au menu self.sous_men.add_command(label="Quitter", command = self.quitter) # ajout des commandes self.sous_men.add_command(label="Connexion Admin", command = self.admin) self.biblio_menu.add_command(label="Information",command=self.helpp) self.biblio_menu.add_command(label="Retour", command = self.retour_livre) self.config(menu = self.biblio_menu) # permet de configurer le menu # le menu doit toujours être defini dans une fenetre de Tk , jamais dans un Frame... self.frames = {} for F in cat_tuple: page_name= F frame = F(parent=container,controller=self) self.frames[page_name]= frame #faire apparaitre les pages au même endroit frame.grid(row=0, column=0, sticky="nsew") self.affich_fenetre("BibliothequeUL") def affich_fenetre(self,page_name): #affichage d'une fenêtre avec le nom donnee dans la fonction frame = self.frames[page_name] frame.tkraise() #======= definition des fonctions===================================== def admin(self): pass def retour_livre(self): pass def quitter(self): self.destroy() def helpp(self): print("please place your student card") class BibliothequeUL(Frame): def __init__(self, parent, controller): Frame.__init__(self,parent) self.controller = controller w,h = 800, 500 self.image = PhotoImage(file='female.png', master=self) self.canvas = Canvas(self, width = w, height = h, scrollregion = (0, 0, 1000,1000 )) self.canvas.pack(fill ="both" , expand=True) self.canvas.create_image((w//2 , h//2), image = self.image) self.logo = PhotoImage(file='logo1.png', master = self) logo_label= Label(self.canvas , image = self.logo) logo_label.place( y = 650) #===================création d'un scrollbar pour le canva=============================== #scl = Scrollbar(self.canvas, orient ="vertical") #scl.config(command = self.canvas.yview) #self.canvas.config(yscrollcommand = scl.set) #scl.pack(side ="right", fill="y" #creation d'un label et placement dans la page label1 = Label(self.canvas, text="Matieres" , font = 'corbel',fg='white',bg='#DAA520') label1.pack(side = "top" , fill = "x") #label1.grid(row = 0 , sticky ="nsew") #self.labPlace(label1) #===================creation des boutons============================ mathButton = Button(self.canvas, text ="Mathematiques", width = 30 ,command = Mathematique.show(),bg ="#DAA520") phyButton = Button(self.canvas, text ="AstroPhysique", width=30 ,command = Astrophysique.show() ,bg ="#DAA520") elecButton = Button(self.canvas, text ="Electromagnetisme", width =30, command = Electromagnetique.show(),bg ="#DAA520") #optButton = Button(self.canvas, text ="Optique",width=30, command =lambda: controller.affich_fenetre("Optique"),bg ="#DAA520") #===================placement des boutons avec l'instruction grid================= #mathButton.grid(row = 300 , sticky = E) #phyButton.grid(row =301 , sticky =E) #elecButton.grid(row = 302, sticky=E) #optButton.grid(row = 303, sticky = E) mathButton.place( x = 600 , y = 30) phyButton.place( x = 600 , y = 60) elecButton.place( x = 600 , y = 90) #optButton.place( x = 600 , y = 120) #====================Affichage de la date courante et du temps==================== Dframe = Frame(self.canvas, borderwidth = 2, relief = GROOVE, bg="black") Dframe.pack(side = "bottom") #label_date= Label(Dframe, text = "Date "+strftime('%Y-%m-%d' , datetime.now())) label_date = Label(Dframe , text = datetime.now().strftime('%Y-%m-%d %H:%M:%S')) label_date.pack() if __name__=="__main__": app = Fen_principale() app.title("Bibliothèque Universitaire") app.geometry("800x600+300+500") app.mainloop() #c = ImplCategory("tata") #c.mainloop() #c.show() #print(c.parent)
Partager