Come nascondere, recuperare e cancellare i widget di Tkinter
- Nascondere e recuperare i widget di Tkinter
- Cancellare i widget di Tkinter in modo permanente cliccando su un pulsante
In questo tutorial, mostreremo come nascondere, recuperare i widget di Tkinter, facendo clic su un pulsante. Infine, vi mostreremo anche come eliminare o eliminare i widget Tkinter esistenti.
Nascondere e recuperare i widget di Tkinter
Metodo pack_forget()
per nascondere i widget di Tkinter
Al contrario di metodo pack
nei widget di Tkinter, potremmo nascondere i widget di Tkinter chiamando il metodo pack_forget()
per rendere i widget invisibili.
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()
è legato al comando del pulsante buttonForget
.
Nasconderà il widget dell’etichetta dopo aver cliccato il pulsante, ma l’etichetta stessa esiste ancora, ma diventa invisibile.
Dobbiamo richiamare il metodo pack()
per impacchettare di nuovo il widget per renderlo visibile, o in altre parole, per recuperarlo.
grid_forget()
Metodo per nascondere i widget di Tkinter se si usa il layout grid
Se i widget sono posizionati con il gestore di layout grid
, dovremmo usare il metodo grid_forget()
per rendere i widget di Tkinter invisibili.
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()
)
Qui, leghiamo il metodo grid_forget
al comando del pulsante.
Si potrebbe notare che la posizione dell’etichetta non è la stessa prima che venga nascosta dopo aver richiamato il metodo grid
.
Se intendiamo ripristinare l’etichetta nella sua posizione originale, il metodo grid_remove
sarà l’opzione giusta.
grid_remove()
Metodo per nascondere i widget di Tkinter se si usa il layout grid
grid_remove()
nasconde il widget ma ricorda le opzioni della griglia come column
e 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()
Cancellare i widget di Tkinter in modo permanente cliccando su un pulsante
Vi mostreremo come cancellare i widget di Tkinter in modo permanente chiamando il metodo destroy
in questa sezione.
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()
Il tasto viene cancellato dopo aver cliccato il tasto.
Si può provare a fare clic sul pulsante buttonRecover
ma si otterrà la notifica di errore _tkinter.TclError
come segue,
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