我已经尝试了一切,但是我的pack_forget在tkinter中不起作用?

时间:2020-09-28 14:44:40

标签: python tkinter

我不知道为什么,但是.pack_forget()无法正常工作。这是代码。

def home():
    home = Frame(root)
    welcome = Label(home, text = 'Welcome!')

    if btn.config('relief')[-1] == 'raised':
        btn.config(relief="sunken")
        home.pack() 
        welcome.pack()
    else:
        btn.config(relief="raised")
        home.pack_forget()
        welcome.pack_forget()
btn = Button(assignmentButtons, text = 'Home', borderwidth = 0, padx = 18, anchor = 'w', activebackground = '#4a4646', activeforeground = '#918787',  relief = RAISED, cursor = 'hand2', command = home)
btn.config(width=25, height=2, bg = '#363333', fg = '#918787')
btn.pack(anchor = 'nw')

2 个答案:

答案 0 :(得分:1)

您的问题是范围之一。 .pack_forget() 从视图中删除home框架和welcome标签。但是被遗忘的窗口小部件只是被创建而从未.pack被放置!

每次按下btn时,都会创建一个名为home的新框架和一个名为welcome的新标签。如果btn的释放值是"raised",则将这些小部件打包。否则,将忘记刚创建但尚未打包的窗口小部件(这不会执行任何操作,因为它们尚不可见)。您实际上从未引用已经打包的小部件。您需要传递对包装好的小部件的引用才能删除它们。

一种方法是使用homewelcome作为实例化类的属性的类来生成tkinter代码。然后,您可以使用self.home.pack_forget()self.welcome.pack_forget()来引用它们。

有关使用类定义的示例,请参见this link

答案 1 :(得分:0)

我相信您遇到的问题是您有一个函数和一个名称相同的TK框架。尝试区分它们,看看是否有帮助。即。您已将“ home”列为功能和附加到根目录的框架