我对围绕tkinter“ grid_forget()”的文档感到困惑
我知道此功能不会永久删除归因于它的小部件,但是我不知道如何再次调用它。此外,如果将小部件遗忘在框架中,可以将其调回同一框架吗?

非常感谢非常爱

最佳答案

您可以不带任何参数调用grid()来反转grid_remove()的效果。

在下面的示例中,在窗口顶部使用grid放置了一个标签。有一个切换按钮,可以在调用gridgrid_remove之间交替显示,以显示不带参数的调用grid将完全还原消息。

注意,例如,当消息重新出现时,rowcolumncolumnspan属性都会被记住。

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_removegrid_forget之间的主要区别-grid_forget确实会忘记网格选项,而grid_remove会删除小部件,但会记住设置。

09-20 10:41