Как скрыть, восстановить и удалить Tkinter виджеты

  1. Скрыть и восстановить виджеты Tkinter
  2. Удалить тикинтерные виджеты Нажмите кнопку

В данном уроке мы продемонстрируем, как скрыть, восстановить и удалить Tkinter виджеты, нажав на кнопку. В конце мы также покажем, как удалить или убить существующие Tkinter-виджеты.

Скрыть и восстановить виджеты Tkinter

pack_forget() метод для сокрытия виджетов Tkinter Widgets

В отличие от метода pack в виджетах Tkinter, мы могли скрыть виджеты Tkinter, вызвав метод pack_forget() для того, чтобы сделать виджеты невидимыми.

try:
    import Tkinter as tk
except:
    import tkinter as tk
    

class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.label=tk.Label(self.root,
                           text = "Label")
       self.buttonForget = tk.Button(self.root,
                          text = 'Click to hide Label',
                          command=lambda: self.label.pack_forget())
       self.buttonRecover = tk.Button(self.root,
                          text = 'Click to show Label',
                          command=lambda: self.label.pack())       
       
       self.buttonForget.pack()
       self.buttonRecover.pack()
       self.label.pack(side="bottom")
       self.root.mainloop()

   def quit(self):
       self.root.destroy()
        
app = Test()

Скрыть и восстановить виджеты можно, нажав кнопку

self.buttonForget = tk.Button(self.root,
                          text = 'Click to hide Label',
                          command=lambda: self.label.pack_forget())

pack_forget() привязывается к команде кнопки buttonForget.

После нажатия кнопки виджет метки будет скрыт, но сама метка все еще существует, но становится невидимой.

Нам нужно снова вызвать метод pack() для упаковки виджета, чтобы сделать его видимым, или другими словами, для его восстановления.

grid_forget() Метод скрытия виджетов, если используется макет grid

Если виджеты размещаются в менеджере компоновки grid, то следует использовать метод grid_forget() для того, чтобы сделать виджеты Tkinter невидимыми.

try:
    import Tkinter as tk
except:
    import tkinter as tk
    

class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.label=tk.Label(self.root,
                           text = "Label")
       self.buttonForget = tk.Button(self.root,
                          text = 'Click to hide Label',
                          command=lambda: self.label.grid_forget())
       self.buttonRecover = tk.Button(self.root,
                          text = 'Click to show Label',
                          command=lambda: self.label.grid())       
       
       self.buttonForget.grid(column=0, row=0, padx=10, pady=10)
       self.buttonRecover.grid(column=0, row=1, padx=10,  pady=10)
       self.label.grid(column=0, row=2, padx=10, pady=10)
       self.root.mainloop()

   def quit(self):
       self.root.destroy()
        
app = Test()

Скрытие и восстановление виджетов методом grid_forget производится нажатием кнопки

self.buttonForget = tk.Button(self.root,
                          text = 'Click to hide Label',
                          command=lambda: self.label.grid_forget())

Здесь мы связываем метод grid_forget с командой кнопки.

Вы можете заметить, что позиция метки не совпадает до того, как она будет скрыта после повторного вызова метода grid.

Если мы хотим восстановить исходную позицию метки, то метод grid_remove будет правильным вариантом.

grid_remove() Метод скрытия виджетов цинтера, если используется grid макет

grid_remove() скрывает виджет, но запоминает опции сетки, такие как колонка и ряд.

try:
    import Tkinter as tk
except:
    import tkinter as tk
    

class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.label=tk.Label(self.root,
                           text = "Label")
       self.buttonForget = tk.Button(self.root,
                          text = 'Click to hide Label',
                          command=lambda: self.label.grid_remove())
       self.buttonRecover = tk.Button(self.root,
                          text = 'Click to show Label',
                          command=lambda: self.label.grid())       
       
       self.buttonForget.grid(column=0, row=0, padx=10, pady=10)
       self.buttonRecover.grid(column=0, row=1, padx=10,  pady=10)
       self.label.grid(column=0, row=2, padx=10, pady=20)
       self.root.mainloop()

   def quit(self):
       self.root.destroy()
        
app = Test()

Скрывает и восстанавливает виджеты методом grid_remove, нажимая кнопку

Удалить тикинтерные виджеты Нажмите кнопку

В этом разделе мы покажем, как навсегда удалить виджеты Tkinter, вызвав метод destroy.

try:
    import Tkinter as tk
except:
    import tkinter as tk
    

class Test():
   def __init__(self):
       self.root = tk.Tk()
       self.label=tk.Label(self.root,
                           text = "Label")
       self.buttonForget = tk.Button(self.root,
                          text = 'Click to hide Label',
                          command=lambda: self.label.destroy())
       self.buttonRecover = tk.Button(self.root,
                          text = 'Click to show Label',
                          command=lambda: self.label.pack())       
       
       self.buttonForget.pack()
       self.buttonRecover.pack()
       self.label.pack(side="bottom")
       self.root.mainloop()

   def quit(self):
       self.root.destroy()
        
app = Test()

Tkinter удаляет виджеты методом уничтожения нажатием кнопки

Кнопка удаляется после нажатия на нее.

Вы можете попробовать нажать кнопку buttonRecover, но получите уведомление об ошибке _tkinter.TclError, как показано ниже,

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\WinPython\WPy-3661\python-3.6.6.amd64\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:\Users\jinku\OneDrive\Bureaublad\test.py", line 17, in <lambda>
    command=lambda: self.label.pack())
  File "D:\WinPython\WPy-3661\python-3.6.6.amd64\lib\tkinter\__init__.py", line 2140, in pack_configure
    + self._options(cnf, kw))
_tkinter.TclError: bad window path name ".!label"

Сопутствующая статья - Tkinter Label

  • Как изменить размер шрифта этикетки Tkinter
  • Как изменить текст этикетки Tkinter
  • Как получить текст на этикетке Tkinter
  • Как установить границу виджета метки Tkinter
  • Сопутствующая статья - Tkinter

  • Как изменить размер шрифта этикетки Tkinter
  • Как изменить текст этикетки Tkinter
  • Как получить текст на этикетке Tkinter
  • Как установить границу виджета метки Tkinter
  • comments powered by Disqus