Comment cacher, récupérer et supprimer les widgets Tkinter
- Cacher et récupérer les widgets Tkinter
- Supprimer définitivement les widgets Tkinter en cliquant sur un bouton
Dans ce tutoriel, nous allons démontrer comment cacher, récupérer les widgets Tkinter, en cliquant sur un bouton. Enfin, nous vous montrerons également comment supprimer ou tuer les widgets Tkinter existants.
Cacher et récupérer les widgets Tkinter
pack_forget()
méthode pour cacher les Widgets Tkinter
Contrairement à la méthode pack
dans les widgets Tkinter, nous pourrions cacher les widgets Tkinter en appelant la méthode pack_forget()
pour rendre les widgets 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 lié à la commande du bouton buttonForget
.
Il va cacher le widget de label après avoir cliqué sur le bouton, mais le label lui-même existe toujours mais devient invisible.
Nous devons appeler la méthode pack()
à nouveau pour empaqueter le widget afin de le rendre visible, ou en d’autres termes, pour le récupérer.
grid_forget()
Méthode pour cacher les widgets Tkinter si le Layout grid
est utilisé
Si les widgets sont placés avec le gestionnaire de layout grid
, nous devrions utiliser la méthode grid_forget()
pour rendre les widgets Tkinter 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.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()
)
Ici, nous lions la méthode grid_forget
à la commande du bouton.
Vous pourriez remarquer que la position du label n’est pas la même avant qu’il ne soit caché après que vous ayez appelé la méthode grid
à nouveau.
Si nous avons l’intention de restaurer le label à sa position originale, la méthode grid_remove
sera la bonne option.
grid_remove()
Méthode pour cacher les widgets Tkinter si le Layout grid
est utilisé
grid_remove()
cache le widget mais se souvient des options de la grille comme colonne
et rangée
.
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()
Supprimer définitivement les widgets Tkinter en cliquant sur un bouton
Nous allons montrer comment supprimer définitivement les widgets Tkinter en appelant la méthode destroy
dans cette section.
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()
Le bouton est supprimé après avoir cliqué sur le bouton.
Vous pouvez essayer de cliquer sur le bouton buttonRecover
mais vous obtiendrez la notification d’erreur _tkinter.TclError
comme ci-dessous,
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