[英]Python tkinter-multiple frames
我已經開始學習python。 在這里輸入圖像描述,我正在嘗試制作tkinter多幀應用程序。 但是輸出是這樣的。 我不知道為什么每一幀都顯示“第三頁”按鈕,我試圖弄清楚但不知道。 我是新手。 請幫我。 非常感謝。
import tkinter as tk
from tkinter import ttk
Large_Font=("Verdana",16)
class First(tk.Tk):#inherited tk.Tk
def __init__(self, *args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
# self.iconbitmap(default='favicon.ico')
tk.Tk.wm_title(self,"First one!")
container = tk.Frame(self)#always have this, frame is predef frame is edge of window
container.pack(side="top",fill="both",expand=True)# fill is for limits you set and expand is to go beyond if needed
container.grid_rowconfigure(0,weight=1)#0 is min value, weight specs priority
container.grid_columnconfigure(0,weight=1)
self.frames={}
for F in (StartPage, PageOne, PageTwo, PageThree):
frame = F(container,self)
self.frames[F]=frame
frame.grid(row=0,column=0,sticky="ew")
self.show_frame(StartPage)
def show_frame(self,cont):
frame=self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label=ttk.Label(self,text="Hello World",font=Large_Font)
label.pack(pady=10,padx=10)
button = ttk.Button(self,text="PageOne", command=lambda: controller.show_frame(PageOne))
button.pack()
button1=ttk.Button(self,text="PageTwo",command=lambda: controller.show_frame(PageTwo))
button1.pack()
button2=ttk.Button(self,text="Page Three",command= lambda: controller.show_frame(PageThree))
button2.pack()
class PageOne(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label=tk.Label(self,text="Welcome to Page 1",font=Large_Font)
label.pack(pady=10,padx=10)
button = ttk.Button(self,text="To Home", command=lambda: controller.show_frame(StartPage))
button.pack()
button1 = ttk.Button(self,text="To PageTwo", command=lambda: controller.show_frame(PageTwo))
button1.pack()
class PageTwo(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label=tk.Label(self,text="Welcome to Page 2",font=Large_Font)
label.pack(pady=10,padx=10)
button = ttk.Button(self,text="To Home", command=lambda: controller.show_frame(StartPage))
button.pack()
button1 = ttk.Button(self,text="To PageOne", command=lambda: controller.show_frame(PageOne))
button1.pack()
class PageThree(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
label=ttk.Label(self,text="Graph page",font=Large_Font)
label.pack(pady=10,padx=10)
button = ttk.Button(self,text="To Home", command=lambda: controller.show_frame(StartPage))
button.pack()
button1 = ttk.Button(self,text="To PageOne", command=lambda: controller.show_frame(PageOne))
button1.pack()
app=First()
app.mainloop()
不同的幀不會完全重疊。 如果為每個框架提供不同的背景顏色,則可以清楚地看到正在發生的情況。 例如:
class PageThree(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent, bg='thistle')
然后針對您的每個頁面執行此操作。
因此,使頁面大小相同或使用pack_forget()
。
更改:
frame.grid(row=0,column=0,sticky="ew")
對此:
frame.grid(row=0,column=0,sticky="nsew")
您所看到的是頁面尺寸不同的結果,因此您可以看到包含按鈕3的頁面。現在,您僅對東西方向設置了粘性,但是在南北方向上您的頁面沒有延伸到填補他們的父母。 您需要做的所有糾正此問題的方法是將操縱桿固定在各個方向。
您還可以使用其他指導。 例如,您可以在每次調用新頁面時重建主框架。 當您要顯示許多頁面或不同種類的內容時,這可能會有所幫助。
您可以將所有內容都設為一頁,只需將標簽和按鈕更新為新內容即可。
或者,您可以執行已完成的操作,然后簡單地更正所顯示的每個窗口/框架的大小,以免看不到任何重疊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.