Wie man Frames in Tkinter wechselt

Wir müssen in einen anderen Bereich der Tkinter-GUI wechseln, indem wir auf eine Schaltfläche klicken, und könnten dann zum Hauptteil zurückkehren, nachdem wir auf die Schaltfläche in diesem neuen Bereich geklickt haben.

Rahmen in Tkinter wechseln

Rahmen wechseln, indem der alte Rahmen zerstört und durch den neuen ersetzt wird

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()

Die Methode switch_frame(self, frame_class) zerstört den alten Rahmen und ersetzt dann den neuen Rahmen frame_class.

tk.Button(self, text="Gehe zu Seite eins", command=lambda: master.switch_frame(PageOne)).pack() übergibt das Argument frame PageOne an den Button-Befehl switch_frame. Es wird die Funktion swtich_frame aufrufen, nachdem der Button angeklickt wurde.

comments powered by Disqus