簡體   English   中英

在tkinter中一次只顯示一個幀

[英]Displaying only one frame at a time in tkinter

我一直在努力解決這個問題。 我想我錯過了一些簡單的信息,我希望你們能幫我解決這個問題。

我試圖讓tkinter顯示不同的幀,我最終會將小部件放在其中。 這是我做的:

  1. 我已經創建了一個應該初始化窗口的類,並使程序運行所有不同的幀。

  2. 我為每個幀創建了一個單獨的類(我打算在程序完成時將變量與不同的類相關聯),並分配一個變量來啟動該類並使其運行它的init函數

  3. 我通過告訴它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而不是在它上面分層。

如果您正在使用將窗口提升到另一個窗口之上的策略,則需要使用gridplace將窗口小部件疊加在一起。 分層是pack根本無法做到的事情。

您的另一個選擇是在新窗口上調用pack之前在當前窗口調用pack_forget

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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