我不知道为什么,但是.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')
答案 0 :(得分:1)
您的问题是范围之一。 .pack_forget()
是从视图中删除home
框架和welcome
标签。但是被遗忘的窗口小部件只是被创建而从未.pack
被放置!
每次按下btn
时,都会创建一个名为home
的新框架和一个名为welcome
的新标签。如果btn
的释放值是"raised"
,则将这些小部件打包。否则,将忘记刚创建但尚未打包的窗口小部件(这不会执行任何操作,因为它们尚不可见)。您实际上从未引用已经打包的小部件。您需要传递对包装好的小部件的引用才能删除它们。
一种方法是使用home
和welcome
作为实例化类的属性的类来生成tkinter代码。然后,您可以使用self.home.pack_forget()
和self.welcome.pack_forget()
来引用它们。
有关使用类定义的示例,请参见this link。
答案 1 :(得分:0)
我相信您遇到的问题是您有一个函数和一个名称相同的TK框架。尝试区分它们,看看是否有帮助。即。您已将“ home”列为功能和附加到根目录的框架