Como esconder, recuperar e excluir widgets Tkinter

  1. Esconder e Recuperar Widgets de Tkinter
  2. Apagar Widgets de Tkinter Permanentemente Clicando em um Botão

Neste tutorial, vamos demonstrar como esconder, recuperar os widgets Tkinter, clicando em um botão. Eventualmente, também lhe mostraremos como apagar ou matar widgets Tkinter existentes.

Esconder e Recuperar Widgets de Tkinter

pack_forget() método para esconder Tkinter Widgets

Em contraste com método pack nos widgets Tkinter, poderíamos esconder os widgets Tkinter chamando pack_forget() método para tornar os widgets invisíveis.

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

Esconder e recuperar os widgets de Tkinter clicando em um botão

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

O pack_forget() está ligado ao comando do botão buttonForget.

Ele irá esconder o widget da etiqueta após clicar no botão, mas a própria etiqueta ainda existe, mas torna-se invisível.

Nós precisamos chamar o método pack() novamente para empacotar o widget para torná-lo visível, ou em outras palavras, para recuperá-lo.

grid_forget() Method to Hide Tkinter Widgets if grid Layout é Usado

Se os widgets são colocados com o gerenciador de layout grid, devemos utilizar o método grid_forget() para tornar os widgets Tkinter invisíveis.

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

O Tkinter esconde e recupera widgets com o método grid_forget, clicando em um botão

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

Aqui, nós ligamos o método grid_forget ao comando do botão.

Você pode notar que a posição da etiqueta não é a mesma antes de ser escondida depois que você chamar o método grid novamente.

Se pretendemos restaurar a etiqueta à sua posição original, o método grid_remove deve ser a opção certa.

grid_remove() Method to Hide Tkinter Widgets if grid Layout é usado

grid_remove() esconde o widget mas lembra-se das opções de grade como column e linha.

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 esconde e recupera widgets com o método grid_remove, clicando em um botão

Apagar Widgets de Tkinter Permanentemente Clicando em um Botão

Mostraremos como excluir permanentemente os widgets Tkinter chamando o método destroy nesta seção.

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 excluir widgets com o método destroy, clicando em um botão

O botão é apagado após clicar no botão.

Você pode tentar clicar no botão buttonRecover mas receberá a notificação de erro _tkinter.TclError como abaixo,

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"

Artigo relacionado - Tkinter Label

  • Como mudar o texto da etiqueta do Tkinter
  • Artigo relacionado - Tkinter

  • Como mudar o tamanho da fonte da etiqueta Tkinter
  • Como mudar o texto da etiqueta do Tkinter