Python中grid_remove/grid_forget无法移除grid布局的ttk Frame组件求助
解决tkinter中grid_remove()看似无效的问题
嘿,我明白你遇到的问题了——这其实不是grid_remove()的锅,而是你对tkinter的after()方法的用法有点误解😉
问题根源
你写的wait()函数里,root.after(1000)并不会让程序暂停1秒再执行后续代码。它的作用是告诉tkinter在1000毫秒后执行一个任务,但当前函数会立刻继续往下跑。所以你的代码执行顺序是:
- 执行
mainframe.grid_remove(),隐藏Frame - 调用
root.after(1000),注册一个1秒后的空任务(因为你没传回调函数) - 立刻执行
mainframe.grid(),又把Frame显示回来
这就导致Frame几乎没有被隐藏的时间,看起来grid_remove()完全无效。
修正后的代码
你需要把恢复Frame的操作放到after()的回调函数里,让它在1秒后才执行:
from tkinter import Tk, ttk def wait(): # 先隐藏Frame mainframe.grid_remove() # 1秒后执行恢复操作 root.after(1000, lambda: mainframe.grid()) root = Tk() mainframe = ttk.Frame(root, padding="3 3 12 12") mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) mainframe['borderwidth'] = 5 mainframe['relief'] = 'solid' # 加个边框方便看到Frame # 比如加个按钮触发wait函数 ttk.Button(mainframe, text="测试隐藏", command=wait).grid(column=0, row=0) root.mainloop()
额外说明
- 如果是想彻底移除组件(之后不再恢复),可以用
mainframe.grid_forget(),它会清除组件的grid布局信息;而grid_remove()会保留布局参数,下次grid()时无需重新设置column、row等。 - 确保你的
wait()函数被正确触发(比如绑定到按钮、键盘事件或者程序启动时调用),否则代码不会执行。
内容的提问来源于stack exchange,提问作者Pseudo Nym
相关产品推荐
相关产品推荐

