我一直在努力解决这个问题。我想我错过了一些简单的信息,我希望你们能帮我解决这个问题。
我试图让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()
答案 0 :(得分:0)
执行pack(side='top', ...)
时,top
没有引用包含小部件的顶部,它指的是包含小部件中任何空白空间的顶部。 Page
最初会占用所有空间,然后当您打包Page2
时,它会低于 Page1
,而不是在它上面分层。
如果您使用的策略是将一个窗口抬高到另一个窗口之上,则需要使用grid
或place
将窗口小部件叠加在一起。分层是pack
根本无法做到的。
您的另一个选择是在新窗口调用pack_forget
之前在当前窗口调用pack