我对围绕 tkinter“grid_forget()”的文档感到困惑我知道这个函数不会永久删除归属于它的小部件,但是我不知道如何再次调用它。此外,如果widget 被遗忘在一个frame 中,它可以回调到同一个frame 中吗?
您可以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()
Run Code Online (Sandbox Code Playgroud)
如果您将代码从 using 更改grid_remove为 using grid_forget,则恢复标签不会将其放回相同的位置或具有相同的选项。这是grid_remove和之间的主要区别grid_forget——grid_forget字面上忘记了网格选项,而grid_remove删除了小部件但记住了设置。
这是一个简单的示例,说明当您从网格中删除小部件然后重新网格化时会发生什么。您只需按照最初的方式重新应用网格即可。如果您愿意,您甚至可以选择不同的网格位置。虽然我不确定您是否可以更改它最初分配到的容器。如果没有,那么它将只能重新添加到小部件分配到的原始容器中。
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2538 次 |
| 最近记录: |