Tkinterでフレーム内のウィジェットをクリアする方法を解説
Tkinterのフレーム(Frame)は、多数のウィジェットを美しくグループ化して整理するために使われるコンポーネントです。フレームの中には、ボタン(Button)、エントリー(Entry)、ラベル(Label)、スクロールバー(ScrollBar)など、さまざまなウィジェットを配置できます。
フレームの中身を空にしたい場合、つまりフレーム内のすべてのウィジェットを削除したい場合は、destroy()メソッドを使用します。このメソッドは、winfo_children()でフレームの子ウィジェットを取得し、それぞれに対して呼び出すことで実現できます。
実装手順
フレームをクリアする基本的な流れは以下のとおりです。
- winfo_children()メソッドでフレーム内のすべての子ウィジェットをリストとして取得する
- 取得した各ウィジェットに対してdestroy()メソッドを呼び出して破棄する
この処理を関数として定義しておけば、ボタンのクリックなど任意のタイミングでフレームを初期状態に戻すことができます。
サンプルコード
#必要なライブラリをインポート
from tkinter import *
#tkinterフレームのインスタンスを作成
win = Tk()
#ウィンドウのサイズを設定
win.geometry("600x250")
#フレームを作成
frame = Frame(win)
frame.pack(side="top", expand=True, fill="both")
#テキストラベルを作成
Label(frame, text="パスワードを入力してください", font=('Helvetica', 20)).pack(pady=20)
def clear_frame():
for widgets in frame.winfo_children():
widgets.destroy()
#フレームをクリアするボタンを作成
Button(frame, text="クリア", font=('Helvetica bold', 10), command=clear_frame).pack(pady=20)
win.mainloop()
実行結果
上記のコードを実行すると、「クリア」ボタンが配置されたウィンドウが表示されます。このボタンは、フレーム内のすべてのウィジェットを対象として一括削除を行います。

「クリア」ボタンをクリックすると、フレーム内のすべてのウィジェットが削除され、フレームが空の状態になります。
補足:destroy()とwinfo_children()について
winfo_children()は、指定したウィジェット直下の子ウィジェットをすべて返すメソッドです。一方destroy()は、対象のウィジェットを完全に破棄し、画面からも取り除きます。この2つを組み合わせることで、フレーム内の全要素をまとめて消去できます。
なお、ウィジェットを一時的に非表示にしたいだけの場合は、destroy()ではなくpack_forget()やgrid_forget()を使う方法もあります。これらはウィジェットを破棄せずに画面から隠すだけなので、後で再表示したい場合に便利です。用途に応じて使い分けるとよいでしょう。
-
Tkinterでラベルのテキストを取得する方法を解説
TkinterのLabel(ラベル)ウィジェットは、ウィンドウ上にテキストや画像を表示するために使用される基本的なコンポーネントです。フォントファミリーやパディング、幅・高さなどのオプションを指定することで、ラベルの見た目を自由にカスタマイズできます。ラベルに設定したテキストを取得したい場合は、ラベルウィジェットに対して [text] を指定するだけで、簡単にその値へアクセスできます。以下に具体的なサンプルコードを示します。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウ
-
Tkinterウィジェットの境界線の色を設定・変更する方法をわかりやすく解説
Tkinterアプリケーションを開発していると、ウィジェットの境界線(ボーダー)の色を変更したくなることがあります。実は、highlightbackground や highlightcolor といったプロパティを設定するだけで、簡単に境界線の色をカスタマイズできます。これらのプロパティは、ウィジェットにフォーカスがあるかどうかに応じて使い分けられます。highlightbackground はフォーカスがないときの境界線の色、highlightcolor はフォーカスがあるときの境界線の色を指定します。また、highlightthickness を設定すると、境界線の太さも調整可能です。サ