2013-02-11 48 views
15

我在这里有一个相当简单的问题。在Tkinter(python)中,我想知道谁来使用一个按钮来访问我的应用程序的不同页面,例如注册页面和登录页面。我知道图形用户界面没有像网站那样的“页面”,我已经看到了几种不同的方式,但是链接到不同页面的最佳方式是什么?使用Tkinter中的按钮导航到应用程序的不同页面?

非常感谢大家!

回答

17

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

一个简单的方法是将帧叠加在一起(这是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() 
+0

比你这么多,正是我在后! – 2013-02-12 09:06:24

+0

@CasparWylie:所有这个例子的意思是,这整个例子是一个文本块。您可以将其分成尽可能多的文件 - 这与解决方案无关。每个“页面”可以很容易地成为自己的模块。 – 2013-02-12 12:04:00

+0

@BryanOakley,使用笔记本电脑不是更好吗? http://www.tkdocs.com/tutorial/complex.html#notebook – user3885927 2016-04-15 20:42:29

相关问题