如何在 Tkinter 中切换框架

Jinku Hu 2024年2月15日
如何在 Tkinter 中切换框架

本教程中我们会通过单击一个按钮来切换到 Tkinter GUI 的其他部分,然后在该新框架中单击该按钮后可以返回到主框架。

Tkinter 中切换框架

通过关闭旧框架并替换为新框架来切换框架

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

switch_frame(self, frame_class) 方法破坏旧框架,然后用新框架 frame_class 代替。

tk.Button(self, text="Go to page one", command=lambda: master.switch_frame(PageOne)).pack()PageOne 参数传递到了按钮命令 switch_frame。单击按钮后,它将调用 swtich_frame 函数。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook