Вы можете вызвать 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
удаляет виджет, но запоминает настройки.