使用Tkinter中的按钮导航到应用程序的不同页面?

发布于 2021-01-29 15:04:09

我在这里有一个很简单的问题。在Tkinter(python)中,我想知道谁使用按钮来转到应用程序的不同页面,例如注册页面和登录页面。我知道GUI没有网站那样的“页面”,尽管我看到了几种不同的方法,但是建立到不同页面的链接的最佳方法是什么?

非常感谢大家!

关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使每一页成为框架。然后,所有按钮所需要做的就是隐藏可见的内容,然后使所需的帧可见。

    一种简单的方法是将框架彼此堆叠(这是place有意义的一次),然后堆叠lift()要显示的框架。当所有页面大小相同时,此技术效果最佳。实际上,它要求您显式设置包含框架的大小。

    以下是一个人为的示例。这不是解决问题的唯一方法,只是证明它不是特别难解决的问题:

    import Tkinter as tk
    
    class Page(tk.Frame):
        def __init__(self, *args, **kwargs):
            tk.Frame.__init__(self, *args, **kwargs)
        def show(self):
            self.lift()
    
    class Page1(Page):
       def __init__(self, *args, **kwargs):
           Page.__init__(self, *args, **kwargs)
           label = tk.Label(self, text="This is page 1")
           label.pack(side="top", fill="both", expand=True)
    
    class Page2(Page):
       def __init__(self, *args, **kwargs):
           Page.__init__(self, *args, **kwargs)
           label = tk.Label(self, text="This is page 2")
           label.pack(side="top", fill="both", expand=True)
    
    class Page3(Page):
       def __init__(self, *args, **kwargs):
           Page.__init__(self, *args, **kwargs)
           label = tk.Label(self, text="This is page 3")
           label.pack(side="top", fill="both", expand=True)
    
    class MainView(tk.Frame):
        def __init__(self, *args, **kwargs):
            tk.Frame.__init__(self, *args, **kwargs)
            p1 = Page1(self)
            p2 = Page2(self)
            p3 = Page3(self)
    
            buttonframe = tk.Frame(self)
            container = tk.Frame(self)
            buttonframe.pack(side="top", fill="x", expand=False)
            container.pack(side="top", fill="both", expand=True)
    
            p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
            p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
            p3.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
    
            b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
            b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift)
            b3 = tk.Button(buttonframe, text="Page 3", command=p3.lift)
    
            b1.pack(side="left")
            b2.pack(side="left")
            b3.pack(side="left")
    
            p1.show()
    
    if __name__ == "__main__":
        root = tk.Tk()
        main = MainView(root)
        main.pack(side="top", fill="both", expand=True)
        root.wm_geometry("400x400")
        root.mainloop()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看