grid_remove不删除小部件

时间:2018-03-31 15:45:01

标签: python tkinter

我是python的新手,完全有可能我的部分出现了一些小错误导致它,但我一直在尝试删除使用grid()放置的ttk框架小部件。我一直在尝试grid_forget,但它不起作用。以下是代码的一些部分:

def wait():
    mainframe.grid_remove()
    root.after(1000)
    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'] = 'sunken'
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
#...
root.option_add('*tearOff', FALSE)
menubar = Menu(root)
root['menu'] = menubar
filemenu = Menu(menubar)
filemenu.add_command(label='Test', command=wait)

但是,按文件菜单中的按钮仍然没有工作。我究竟做错了什么?另外,当我做对了,它会隐藏框架包含的所有内容吗?

1 个答案:

答案 0 :(得分:0)

让我们检查这三行代码:

mainframe.grid_remove()
root.after(1000)
mainframe.grid()

第一行确实成功删除了网格。但是,在事件循环有机会更新显示之前,它仍然可见。

第二行冻结gui ,包括删除更新显示的功能。

第三行将帧添加回来。由于GUI没有机会在grid_remove()grid()之间更新显示,因此没有明显的变化。

如果您希望隐藏帧一秒钟,请将代码更改为:

mainframe.grid_remove()
root.after(1000, mainframe.grid)

以上内容不会冻结您的GUI,并且将导致mainframe.grid在将来被调用一秒钟。

要回答问题的最后部分:如果隐藏框架,框架内的所有内容也将被隐藏。