[英]Displaying only one frame at a time in tkinter
我一直在努力解決這個問題。 我想我錯過了一些簡單的信息,我希望你們能幫我解決這個問題。
我試圖讓tkinter顯示不同的幀,我最終會將小部件放在其中。 這是我做的:
我已經創建了一個應該初始化窗口的類,並使程序運行所有不同的幀。
我為每個幀創建了一個單獨的類(我打算在程序完成時將變量與不同的類相關聯),並分配一個變量來啟動該類並使其運行它的init函數
我通過告訴它tkraise()我想要顯示的幀來結束StartUp類,這就是事情停止正常工作的地方。
我將每個幀設置為不同的顏色,因此當您運行此程序時,您將看到它們將屏幕空間分開而不是將其抬高到頂部。 我錯過了什么?
最后一點,我故意試圖在我的程序中拼出一切,我就這樣學得更好。 我離開了所以我必須在每個tkinter命令前鍵入tkinter.blah-blah-blah,這樣我就可以輕松識別它們了,我決定不讓我的類繼承Frame或Tk或其他東西。 我正在努力理解我在做什么。
import tkinter
class StartUp:
def __init__(self):
self.root = tkinter.Tk()
self.root.geometry('300x300')
self.container = tkinter.Frame(master=self.root, bg='blue')
self.container.pack(side='top', fill='both', expand=True)
self.page1 = Page1(self)
self.page2 = Page2(self)
self.page1.main_frame.tkraise()
class Page1():
def __init__(self, parent):
self.main_frame = tkinter.Frame(master=parent.container, bg='green')
self.main_frame.pack(side='top', fill='both', expand=True)
class Page2():
def __init__(self, parent):
self.main_frame = tkinter.Frame(master=parent.container, bg='yellow')
self.main_frame.pack(side='top', fill='both', expand=True)
boot_up = StartUp()
boot_up.root.mainloop()
當你pack(side='top', ...)
, top
不會引用包含小部件的頂部,它指的是包含小部件中任何空白空間的頂部。 Page
最初會占用所有空間,然后當你打包Page2
,它會低於 Page1
而不是在它上面分層。
如果您正在使用將窗口提升到另一個窗口之上的策略,則需要使用grid
或place
將窗口小部件疊加在一起。 分層是pack
根本無法做到的事情。
您的另一個選擇是在新窗口上調用pack
之前在當前窗口調用pack_forget
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.