Python Tkinterでトップレベルウィンドウ(Toplevel)だけを閉じる方法を解説
TkinterのToplevelウィンドウは、アプリケーション内に子ウィンドウを作成するための機能です。デフォルトのメインウィンドウと同様に動作し、サイズの設定やプロパティ・属性のカスタマイズはもちろん、ボタンやラベルなどのウィジェットを自由に追加できます。
特定のアプリケーションでToplevelウィンドウを定義した場合、そのウィンドウだけを閉じたい場面があるでしょう。その際に活用するのがdestroy()メソッドです。このメソッドを呼び出すことで、メインウィンドウを残したまま、対象のトップレベルウィンドウのみを閉じることができます。
実装例
以下の例では、クリックするとToplevelウィンドウを開くボタンを持つアプリケーションを作成しています。開かれた子ウィンドウにはラベルテキストが表示され、さらに「Close」ボタンが配置されています。このCloseボタンをクリックすると、対応するToplevelウィンドウだけが閉じられます。
# 必要なライブラリをインポート
from tkinter import *
# tkinterウィンドウのインスタンスを作成
win = Tk()
win.geometry("700x400")
win.title("Root Window")
# トップレベルウィンドウを作成する関数
def create_top():
top = Toplevel(win)
top.geometry("400x250")
top.title("Toplevel Window")
Label(top, text="Hello, Welcome to Tutorialspoint", font='Arial 15 bold').pack()
# トップレベルウィンドウを閉じるためのボタン
button = Button(top, text="Close", command=top.destroy)
button.pack()
# トップレベルウィンドウを開くためのボタンを作成
button = Button(win, text="Click Here", font='Helvetica 15', command=create_top)
button.pack(pady=30)
win.mainloop()実行結果
上記のコードを実行すると、Toplevelウィンドウを開くためのボタンが配置されたメインウィンドウが表示されます。

「Click Here」ボタンを押してToplevelウィンドウを開いたら、「Close」ボタンをクリックすることで、そのトップレベルウィンドウだけを閉じることができます。メインウィンドウは引き続き操作可能な状態で残ります。

ポイントまとめ
- destroy()メソッド:対象ウィジェット(ここではToplevelウィンドウ)を破棄し、画面から取り除きます。
- command引数:Buttonウィジェットのcommandに
top.destroyを渡すことで、クリック時に自動的にウィンドウが閉じられます。 - メインループへの影響なし:Toplevelウィンドウを閉じても、メインウィンドウのmainloop()は継続して動作します。
-
Python Tkinterでルートウィンドウを非表示・破棄する2つの方法
Tkinterアプリケーションのテスト中に、デフォルトのウィンドウやフレームを一時的に隠したい、あるいは完全に閉じたいという場面に遭遇することがあります。Tkinterでは、withdraw()メソッドによる「非表示」と、destroy()メソッドによる「破棄」の2つのアプローチが用意されています。mainloop()とウィンドウのライフサイクルmainloop()は、外部イベントによってウィンドウが閉じられるまで、Tkinterアプリケーションを実行し続ける役割を担います。このメインループが動作している間、ウィンドウは画面上に表示され続けます。ウィンドウを完全に破棄(終了)したい場合は、de
-
tkinterでウィンドウを閉じる方法|destroy()メソッドの使い方を解説
tkinterを使えば、Pythonで手軽にGUIアプリケーションを作成できます。しかし、タイトルバー右上の×ボタン以外の方法でウィンドウやフレームを閉じたい場合、どのように実装すればよいか悩むこともあるでしょう。そのようなときに役立つのが、ウィンドウを破棄して閉じるための .destroy() メソッドです。tkinterの各ウィジェットや属性は互いに独立しているため、「ウィンドウを閉じる処理」を専用の関数として分離して定義できます。これにより、ボタンのクリックイベントからウィンドウを閉じる動作を自由に制御可能です。サンプルコード# ライブラリをインポート from tkinter impo