Como esconder, recuperar e excluir widgets Tkinter
- Esconder e Recuperar Widgets de Tkinter
- Apagar Widgets de Tkinter Permanentemente Clicando em um Botão
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