我对围绕tkinter“ grid_forget()”的文档感到困惑
我知道此功能不会永久删除归因于它的小部件,但是我不知道如何再次调用它。此外,如果将小部件遗忘在框架中,可以将其调回同一框架吗?
非常感谢非常爱
最佳答案
您可以不带任何参数调用grid()
来反转grid_remove()
的效果。
在下面的示例中,在窗口顶部使用grid
放置了一个标签。有一个切换按钮,可以在调用grid
和grid_remove
之间交替显示,以显示不带参数的调用grid
将完全还原消息。
注意,例如,当消息重新出现时,row
,column
和columnspan
属性都会被记住。
import tkinter as tk
class Example():
def __init__(self):
self.root = tk.Tk()
self.root.grid_rowconfigure(2, weight=1)
self.root.grid_columnconfigure(1, weight=1)
self.toolbar = tk.Frame(self.root)
self.toggle = tk.Button(self.toolbar, text="Toggle the message",
command=self.toggle_message)
self.toggle.pack(side="left")
# simulate a typical app with a navigation area on the left and a main
# working area on the right
self.navpanel = tk.Frame(self.root, background="bisque", width=100, height=200)
self.main = tk.Frame(self.root, background="white", width=300, height=200, bd=1, relief='sunken')
self.message = tk.Label(self.root, text="Hello, world!")
self.toolbar.grid(row=0, column=0, columnspan=2)
self.message.grid(row=1, column=0, columnspan=2)
self.navpanel.grid(row=2, column=0, sticky="nsew")
self.main.grid(row=2, column=1, sticky="nsew")
def start(self):
self.root.mainloop()
def toggle_message(self):
if self.message.winfo_viewable():
self.message.grid_remove()
else:
self.message.grid()
if __name__ == "__main__":
Example().start()
如果将代码从使用
grid_remove
更改为使用grid_forget
,则还原标签不会将其放回原处或使用相同的选项。这是grid_remove
和grid_forget
之间的主要区别-grid_forget
确实会忘记网格选项,而grid_remove
会删除小部件,但会记住设置。