Wie man Tkinter Widgets versteckt, wiederherstellt und löscht

Jinku Hu 30 Januar 2023
  1. Tkinter Widgets ausblenden und wiederherstellen
  2. Tkinter Widgets dauerhaft durch Anklicken einer Schaltfläche löschen
Wie man Tkinter Widgets versteckt, wiederherstellt und löscht

In diesem Tutorial werden wir demonstrieren, wie man die Tkinter-Widgets durch Klicken auf eine Schaltfläche ausblendet, wiederherstellt und löscht. Schließlich werden wir Ihnen auch zeigen, wie Sie bestehende Tkinter-Widgets löschen oder beenden können.

Tkinter Widgets ausblenden und wiederherstellen

pack_forget() Methode zum Verstecken von Tkinter Widgets

Im Gegensatz zur pack Methode in Tkinter Widgets, könnten wir die Tkinter Widgets durch den Aufruf der pack_forget() Methode verstecken, um die Widgets unsichtbar zu machen.

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 versteckt und stellt die Widgets wieder her, indem man auf einen Knopf klickt

self.buttonForget = tk.Button(
    self.root, text="Click to hide Label", command=lambda: self.label.pack_forget()
)

pack_forget() ist an den Befehl des Buttons buttonForget gebunden.

Es versteckt das Label-Widget nach dem Klicken des Buttons, aber das Label selbst existiert noch, wird aber unsichtbar.

Wir müssen die pack() Methode erneut aufrufen, um das Widget zu packen, um es sichtbar zu machen, oder mit anderen Worten, um es wiederherzustellen.

grid_forget() Methode zum Ausblenden von Tkinter-Widgets bei Verwendung von grid Layout

Wenn die Widgets mit dem grid-Layoutmanager platziert werden, sollten wir die grid_forget()-Methode verwenden, um die Tkinter-Widgets unsichtbar zu machen.

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 versteckt und stellt die Widgets mit der Methode grid_forget wieder her, indem man auf einen Knopf klickt

self.buttonForget = tk.Button(
    self.root, text="Click to hide Label", command=lambda: self.label.grid_forget()
)

Hier binden wir die grid_forget Methode an den Befehl des Buttons.

Sie könnten feststellen, dass die Position des Labels nicht mehr die gleiche ist, bevor es nach dem erneuten Aufruf der grid Methode ausgeblendet wird.

Wenn wir beabsichtigen, das Label wieder an seine ursprüngliche Position zu bringen, ist die grid_remove Methode die richtige Option.

grid_remove() Methode zum Ausblenden von Tkinter-Widgets bei Verwendung von grid Layout

grid_remove() versteckt das Widget, merkt sich aber die Grid-Optionen wie column und 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()

Tkinter versteckt und rettet Widgets mit der grid_remove-Methode, indem er auf eine Schaltfläche klickt

Tkinter Widgets dauerhaft durch Anklicken einer Schaltfläche löschen

Wir werden zeigen, wie man Tkinter-Widgets dauerhaft löschen kann, indem wir die destroy-Methode in diesem Abschnitt aufrufen.

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 löscht Widgets mit der Destroy-Methode, indem es auf einen Knopf klickt

Die Schaltfläche wird nach dem Anklicken des Buttons gelöscht.

Sie könnten versuchen, den Button buttonRecover anzuklicken, aber Sie erhalten dann die _tkinter.TclError Fehlermeldung wie unten beschrieben,

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"
Autor: 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

Verwandter Artikel - Tkinter Label