簡體   English   中英

Python Tkinter多幀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM