Comment changer de cadre dans Tkinter

Jinku Hu 15 février 2024
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é.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook