Wie man Tkinter Widgets versteckt, wiederherstellt und löscht
- Tkinter Widgets ausblenden und wiederherstellen
- Tkinter Widgets dauerhaft durch Anklicken einer Schaltfläche löschen
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()
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()
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 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()
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"
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