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

В данном уроке мы продемонстрируем, как скрыть, восстановить и удалить 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()
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()
Удалить тикинтерные виджеты Нажмите кнопку
В этом разделе мы покажем, как навсегда удалить виджеты 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()
Кнопка удаляется после нажатия на нее.
Вы можете попробовать нажать кнопку 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"
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedInСопутствующая статья - Tkinter Label
- Как изменить размер шрифта этикетки Tkinter
- Как изменить текст этикетки Tkinter
- Как получить текст на этикетке Tkinter
- Как установить границу виджета метки Tkinter