Cómo ocultar, recuperar y eliminar los widgets de Tkinter
- Ocultar y recuperar los widgets de Tkinter
- Elimine los Widgets de Tkinter de forma permanente haciendo clic en un botón
En este tutorial, demostraremos cómo ocultar, recuperar los widgets de Tkinter, haciendo clic en un botón. Finalmente, también te mostraremos cómo eliminar o matar los widgets de Tkinter existentes.
Ocultar y recuperar los widgets de Tkinter
Método pack_forget()
para ocultar los Widgets de Tkinter
A diferencia del método pack
method en los widgets de Tkinter, podríamos ocultar los widgets de Tkinter llamando al método pack_forget()
para hacerlos invisibles.
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()
está ligado al comando del botón buttonForget
.
Ocultará el widget de la etiqueta después de hacer clic en el botón, pero la etiqueta en sí sigue existiendo pero se vuelve invisible.
Necesitamos llamar al método pack()
de nuevo para empaquetar el widget para hacerlo visible, o en otras palabras, para recuperarlo.
grid_forget()
Método para ocultar los widgets de Tkinter si se usa el diseño grid
Si los widgets se colocan con el gestor de diseño grid
, deberíamos usar el método grid_forget()
para hacer invisibles los widgets de 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()
)
Aquí, enlazamos el método grid_forget
al comando del botón.
Podrías notar que la posición de la etiqueta no es la misma antes de que se oculte después de que vuelvas a llamar al método grid
.
Si pretendemos restaurar la etiqueta a su posición original, el método grid_remove
será la opción correcta.
grid_remove()
Método para ocultar los widgets de Tkinter si se utiliza el diseño grid
grid_remove()
oculta el widget pero recadena las opciones de la parrilla como column
y row
.
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()
Elimine los Widgets de Tkinter de forma permanente haciendo clic en un botón
Mostraremos cómo eliminar los widgets de Tkinter de forma permanente llamando al método destroy
en esta sección.
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()
El botón se borra después de hacer clic en el botón.
Puede intentar hacer clic en el botón buttonRecover
pero obtendrá la notificación de error _tkinter.TclError
como se muestra a continuación,
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