Tkinter ウィジェットを非表示、復元、および削除する方法

  1. Tkinter ウィジェットの非表示と復元
  2. ボタンをクリックして Tkinter ウィジェットを完全に削除する

このチュートリアルでは、ボタンをクリックして Tkinter ウィジェットを非表示および復元する方法を示します。最後に、既存の Tkinter ウィジェットを削除または強制終了する方法を示します。

Tkinter ウィジェットの非表示と復元

Tkinter ウィジェットを非表示にする pack_forget() メソッド

Tkinter ウィジェットの pack メソッドとは対照的に、pack_forget() メソッドを呼び出して Tkinter ウィジェットを非表示にすることができます。

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 ボタンをクリックしてウィジェットを非表示および復元

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

pack_forget()buttonForget をボタンコマンドにバインドします。

ボタンをクリックすると、ラベルウィジェットが非表示になりますが、ラベル自体はまだ存在し、表示されなくなります。

このウィジェットを可視化するためには、再度 pack() メソッドを呼び出す必要があります。言い換えれば、それを復元します。

grid レイアウトを使用している場合に Tkinter ウィジェットを非表示にする grid_forget()

ウィジェットをグリッドレイアウトマネージャーに配置する場合は、grid_forget() メソッドを使用して Tkinter ウィジェットを非表示にする必要があります。

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 ボタンをクリックして grid_forget メソッドでウィジェットを非表示および復元

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

ここで、grid_forget メソッドをボタンのコマンドにバインドします。

grid メソッドを再度呼び出した後、ラベルが非表示になる前にラベルの位置が異なることに気付くかもしれません。

ラベルを元の位置に復元する場合は、grid_remove メソッドを使用する必要があります。

grid レイアウトを使用している場合、Tkinter ウィジェットを非表示にする grid_remove() メソッド

grid_remove() はウィジェットを非表示にしますが、columnrow などのグリッドオプションを記憶しています。

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 は grid_remove メソッドを使用して、ボタンをクリックしてウィジェットを非表示および復元します

ボタンをクリックして Tkinter ウィジェットを完全に削除する

destroy メソッドを呼び出して Tkinter ウィジェットを永久に削除する方法を示します。

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 で destroy メソッドを使用してウィジェットを削除

ボタンをクリックすると、ボタンは削除されます。

buttonRecover ボタンをクリックしてみることができますが、次の _tkinter.TclError エラー通知を受け取ります。

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"

関連記事 - Tkinter Label

  • Tkinter ラベルウィジェットの境界線を設定する方法
  • 関連記事 - Tkinter

  • Tkinter ラベルのテキストを取得する方法
  • Tkinter ラベルウィジェットの境界線を設定する方法
  • comments powered by Disqus