他们是 grid_remember() 吗?可逆 grid_forget()?

Lig*_*n12 3 python tkinter

我对围绕 tkinter“grid_forget()”的文档感到困惑我知道这个函数不会永久删除归属于它的小部件,但是我不知道如何再次调用它。此外,如果widget 被遗忘在一个frame 中,它可以回调到同一个frame 中吗?

Bry*_*ley 7

您可以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()
Run Code Online (Sandbox Code Playgroud)

如果您将代码从 using 更改grid_remove为 using grid_forget,则恢复标签不会将其放回相同的位置或具有相同的选项。这是grid_remove和之间的主要区别grid_forget——grid_forget字面上忘记了网格选项,而grid_remove删除了小部件但记住了设置。


Mik*_*SMT 1

这是一个简单的示例,说明当您从网格中删除小部件然后重新网格化时会发生什么。您只需按照最初的方式重新应用网格即可。如果您愿意,您甚至可以选择不同的网格位置。虽然我不确定您是否可以更改它最初分配到的容器。如果没有,那么它将只能重新添加到小部件分配到的原始容器中。

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)