Hoe Tkinter-widgets te verbergen, te herstellen en te verwijderen

  1. Tkinter-widgets verbergen en herstellen
  2. Verwijder Tkinter Widgets permanent door op een knop te klikken

In deze tutorial laten we zien hoe u de Tkinter-widgets kunt verbergen en herstellen door op een knop te klikken. Uiteindelijk zullen we je ook laten zien hoe je bestaande Tkinter-widgets kunt verwijderen of doden.

Tkinter-widgets verbergen en herstellen

pack_forget() methode om Tkinter Widgets te verbergen

In tegenstelling tot de pack methode in Tkinter-widgets, konden we de Tkinter-widgets verbergen door de pack_forget() methode aan te roepen om de widgets onzichtbaar te maken.

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 verberg en herstel widgets door op een knop te klikken

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

pack_forget() is bindend aan het commando van de knop buttonForget.

Na het klikken op de knop wordt de labelwidget verborgen, maar het label zelf bestaat nog steeds maar wordt onzichtbaar.

We moeten de pack() methode opnieuw oproepen om de widget in te pakken om deze zichtbaar te maken, of met andere woorden, om deze te herstellen.

grid_forget() Methode om Tkinter-widgets te verbergen als grid Layout wordt gebruikt

Als de widgets bij de grid lay- outmanager worden geplaatst , moeten we de grid_forget() methode gebruiken om de Tkinter-widgets onzichtbaar te maken.

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 verberg en herstel widgets met de methode grid_forget door op een knop te klikken

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

Hier binden we de grid_forget methode aan het commando van de knop.

Je zou kunnen opmerken dat de positie van het label niet hetzelfde is voordat het wordt verborgen nadat je de grid methode opnieuw hebt aangeroepen.

Als we het label naar zijn oorspronkelijke positie willen herstellen, is de grid_remove methode de juiste optie.

grid_remove() Methode om Tkinter-widgets te verbergen als grid Layout wordt gebruikt

grid_remove() verbergt de widget maar onthoudt de rasteropties zoals column en 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 verberg en herstel widgets met de grid_remove-methode door op een knop te klikken

Verwijder Tkinter Widgets permanent door op een knop te klikken

We zullen laten zien hoe Tkinter-widgets permanent kunnen worden verwijderd door de destroy methode in deze sectie aan te roepen.

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 verwijdert widgets met de vernietigingsmethode door op een knop te klikken

De knop wordt verwijderd nadat u op de knop hebt geklikt.

Je kan proberen op de knop te klikken, buttonRecover maar krijgt de _tkinter.TclError foutmelding zoals hieronder,

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"

Gerelateerde Artikelen - Tkinter Label

  • Hoe de lettertypegrootte van het Tkinter-label te wijzigen
  • Hoe de Tkinter-labeltekst te wijzigen