Comment cacher, récupérer et supprimer les widgets Tkinter

Jinku Hu 30 janvier 2023
  1. Cacher et récupérer les widgets Tkinter
  2. Supprimer définitivement les widgets Tkinter en cliquant sur un bouton
Comment cacher, récupérer et supprimer les widgets Tkinter

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()

Tkinter cache et récupère les widgets en cliquant sur un bouton

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()

Tkinter cache et récupère les widgets avec la méthode grid_forget en cliquant sur un bouton

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()

Tkinter cache et récupère les widgets avec la méthode grid_remove en cliquant sur un bouton

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()

Tkinter supprime les widgets avec la méthode destroy en cliquant sur un bouton

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"
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - Tkinter Label