15
我在這裏有一個相當簡單的問題。在Tkinter(python)中,我想知道誰來使用一個按鈕來訪問我的應用程序的不同頁面,例如註冊頁面和登錄頁面。我知道圖形用戶界面沒有像網站那樣的「頁面」,我已經看到了幾種不同的方式,但是鏈接到不同頁面的最佳方式是什麼?使用Tkinter中的按鈕導航到應用程序的不同頁面?
非常感謝大家!
我在這裏有一個相當簡單的問題。在Tkinter(python)中,我想知道誰來使用一個按鈕來訪問我的應用程序的不同頁面,例如註冊頁面和登錄頁面。我知道圖形用戶界面沒有像網站那樣的「頁面」,我已經看到了幾種不同的方式,但是鏈接到不同頁面的最佳方式是什麼?使用Tkinter中的按鈕導航到應用程序的不同頁面?
非常感謝大家!
使每個頁面成爲一個框架。然後,所有按鈕需要做的是隱藏任何可見的內容,然後使所需的框架可見。
一個簡單的方法是將幀疊加在一起(這是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()
比你這麼多,正是我在後! – 2013-02-12 09:06:24
@CasparWylie:所有這個例子的意思是,這整個例子是一個文本塊。您可以將其分成儘可能多的文件 - 這與解決方案無關。每個「頁面」可以很容易地成爲自己的模塊。 – 2013-02-12 12:04:00
@BryanOakley,使用筆記本電腦不是更好嗎? http://www.tkdocs.com/tutorial/complex.html#notebook – user3885927 2016-04-15 20:42:29