Comment changer de cadre dans Tkinter

Nous devons passer à une autre section de l’interface graphique de Tkinter en cliquant sur un bouton et nous pourrions ensuite revenir à la section principale après avoir cliqué sur le bouton de cette nouvelle section.

Les cadres de commutation dans Tkinter

Changer de cadre en détruisant l’ancien cadre et en le remplaçant par le nouveau

try:
    import Tkinter as tk
except:
    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):
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()

class StartPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Label(self, text="Start page", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, text="Go to page one",
                  command=lambda: master.switch_frame(PageOne)).pack()
        tk.Button(self, text="Go to page two",
                  command=lambda: master.switch_frame(PageTwo)).pack()

class PageOne(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self,bg='blue')
        tk.Label(self, text="Page one", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, text="Go back to start page",
                  command=lambda: master.switch_frame(StartPage)).pack()

class PageTwo(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self,bg='red')
        tk.Label(self, text="Page two", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, text="Go back to start page",
                  command=lambda: master.switch_frame(StartPage)).pack()

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

La méthode switch_frame(self, frame_class) détruit l’ancien cadre et le remplace par le nouveau cadre frame_class.

tk.Button(self, text="Go to page one", command=lambda:master.switch_frame(PageOne)).pack() passe l’argument frame PageOne à la commande de bouton switch_frame. Il appellera la fonction swtich_frame après que le bouton ait été cliqué.

comments powered by Disqus