Como esconder, recuperar e excluir widgets Tkinter
- Esconder e Recuperar Widgets de Tkinter
- Apagar Widgets de Tkinter Permanentemente Clicando em um Botão
![Como esconder, recuperar e excluir widgets Tkinter](/img/Python-Tkinter/feature-image---How-to-hide-recover-and-delete-Tkinter-widgets.webp)
Neste tutorial, vamos demonstrar como esconder, recuperar os widgets Tkinter, clicando em um botão. Eventualmente, também lhe mostraremos como apagar ou matar widgets Tkinter existentes.
Esconder e Recuperar Widgets de Tkinter
pack_forget()
método para esconder Tkinter Widgets
Em contraste com método pack
nos widgets Tkinter, poderíamos esconder os widgets Tkinter chamando pack_forget()
método para tornar os widgets invisíveis.
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()
)
O pack_forget()
está ligado ao comando do botão buttonForget
.
Ele irá esconder o widget da etiqueta após clicar no botão, mas a própria etiqueta ainda existe, mas torna-se invisível.
Nós precisamos chamar o método pack()
novamente para empacotar o widget para torná-lo visível, ou em outras palavras, para recuperá-lo.
grid_forget()
Method to Hide Tkinter Widgets if grid
Layout é Usado
Se os widgets são colocados com o gerenciador de layout grid
, devemos utilizar o método grid_forget()
para tornar os widgets Tkinter invisíveis.
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()
)
Aqui, nós ligamos o método grid_forget
ao comando do botão.
Você pode notar que a posição da etiqueta não é a mesma antes de ser escondida depois que você chamar o método grid
novamente.
Se pretendemos restaurar a etiqueta à sua posição original, o método grid_remove
deve ser a opção certa.
grid_remove()
Method to Hide Tkinter Widgets if grid
Layout é usado
grid_remove()
esconde o widget mas lembra-se das opções de grade como column
e linha
.
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()
Apagar Widgets de Tkinter Permanentemente Clicando em um Botão
Mostraremos como excluir permanentemente os widgets Tkinter chamando o método destroy
nesta seção.
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()
O botão é apagado após clicar no botão.
Você pode tentar clicar no botão buttonRecover
mas receberá a notificação de erro _tkinter.TclError
como abaixo,
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 Facebook