我对围绕tkinter“ grid_forget()”的文档感到困惑 我知道此功能不会永久删除归因于它的小部件,但是我不知道如何再次调用它。此外,如果在窗口框架中忘记了该小部件,是否可以将其调回同一框架?
非常感谢你的爱
答案 0 :(得分:1)
您可以不带任何参数调用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
则删除了小部件,但记住了设置。
答案 1 :(得分:0)
这是一个简单的示例,用于说明从网格中删除小部件然后重新对其进行网格化时发生的情况。您只需要像开始时一样重新应用网格即可。如果愿意,您甚至可以选择其他网格位置。虽然我不确定是否可以更改最初分配给它的容器。如果没有,则只能将其重新添加到将小部件分配到的原始容器中。
import tkinter as tk
root = tk.Tk()
some_label = tk.Label(root, text="IM HERE!")
some_label.grid(row=0, column=0, columnspan=2)
def forget_label():
some_label.grid_forget()
def return_label():
some_label.grid(row=0, column=0, columnspan=2)
tk.Button(root, text="Forget Label", command=forget_label).grid(row=1, column=0)
tk.Button(root, text="Return Label", command=return_label).grid(row=1, column=1)
root.mainloop()