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

时间:2018-10-18 13:59:18

标签: python tkinter

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

非常感谢你的爱

2 个答案:

答案 0 :(得分:1)

您可以不带任何参数调用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则删除了小部件,但记住了设置。

答案 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()