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

胡金庫 2023年1月30日
  1. Tkinter ウィジェットの非表示と復元
  2. ボタンをクリックして Tkinter ウィジェットを完全に削除する
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"
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Tkinter Label