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
|
import tkinter as tk
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(StartPage)
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
# Toutes les pages seront dans d'autres modules/fichiers que le SampleApp
# Je regroupe ça ici pour simplifier !
class StartPage(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
# avec la méthode .pack() tout fonctionne correctement, mais ça va être compliqué pour organiser les GUI
# si je remplace par .place(), rien de s'affiche, sauf si je change aussi
# le "self" en "master", par ex pour le label :
# tk.Label(master, text="This is the start page").place(relx=0.1, rely=0.1)
# par contre en faisant comme ça, la méthode "switch_frame" de SampleApp n'efface plus les widgets
# quand je passe d'une page à l'autre
# En gros mon objectif : avoir le même fonctionnement, mais en utilisant .place()
tk.Label(self, text="This is the start page").pack(side="top", fill="x", pady=10)
tk.Button(self, text="Open page one",
command=lambda: master.switch_frame(PageOne)).pack()
tk.Button(self, text="Open page two",
command=lambda: master.switch_frame(PageTwo)).pack()
class PageOne(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
# Problème identique à Startpage
tk.Label(self, text="This is page one").pack(side="top", fill="x", pady=10)
tk.Button(self, text="Return to start page",
command=lambda: master.switch_frame(StartPage)).pack()
tk.Button(self, text="Open page two",
command=lambda: master.switch_frame(PageTwo)).pack()
class PageTwo(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
# Problème identique à Startpage
tk.Label(self, text="This is page two").pack(side="top", fill="x", pady=10)
tk.Button(self, text="Return to start page",
command=lambda: master.switch_frame(StartPage)).pack()
if __name__ == "__main__":
app = SampleApp()
app.geometry("300x300")
app.mainloop() |
Partager