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 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.