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()
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()
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()
はウィジェットを非表示にしますが、column
や 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 ウィジェットを完全に削除する
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()
ボタンをクリックすると、ボタンは削除されます。
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"