Tkinterでウィンドウのクローズイベントを処理する方法
Tkinterには、ウィンドウを閉じるためのカスタムハンドラが用意されています。これはコールバック関数として機能し、ユーザーが任意のタイミングで呼び出すことでウィンドウを閉じることができます。
このハンドラでウィンドウを閉じるには、destroy()メソッドを使用します。このメソッドは、任意の関数やウィジェットから呼び出された時点で、ウィンドウを即座に終了させます。以下では、メソッドを定義してクローズイベントハンドラを呼び出す具体的な方法を紹介します。
ウィジェットの引数として指定する方法
もっともシンプルなのは、Buttonウィジェットのcommandオプションに、win.destroyを直接渡す方法です。関数を定義する必要がないため、短いコードで実装できます。
サンプルコード
#必要なライブラリをインポート
from tkinter import *
#tkinterフレーム(ウィンドウ)のインスタンスを作成
win = Tk()
#ウィンドウサイズを設定
win.geometry("600x400")
#ボタンを作成し、commandにメソッド名を渡す
my_button = Button(win, text="X", font=('Helvetica bold', 20),
borderwidth=2, command=win.destroy)
my_button.pack(pady=20)
win.mainloop()関数内で呼び出す方法
閉じる前に何らかの処理(確認ダイアログの表示やデータの保存など)を行いたい場合は、独自の関数を定義し、その中でdestroy()を呼び出します。
サンプルコード
#必要なライブラリをインポート
from tkinter import *
#tkinterフレーム(ウィンドウ)のインスタンスを作成
win = Tk()
#ウィンドウサイズを設定
win.geometry("600x300")
#ウィンドウを閉じる関数を定義
def close():
win.destroy()
#ボタンを作成し、commandに関数名を渡す
my_button = Button(win, text="X", font=('Helvetica bold', 20),
borderwidth=2, command=close)
my_button.pack(pady=20)
win.mainloop()実行結果
上記のコードを実行すると「X」と表示されたボタンが作成され、そのボタンをクリックすることでメインウィンドウを閉じることができます。

補足:タイトルバーの「×」ボタンのイベントを捕捉する
ユーザーがウィンドウ右上の「×」ボタンをクリックしたときの動きを制御したい場合は、protocol()メソッドでWM_DELETE_WINDOWプロトコルに独自のコールバックを登録します。これにより、閉じる前の確認処理などを実装できます。
def on_close():
print("ウィンドウを閉じます")
win.destroy()
win.protocol("WM_DELETE_WINDOW", on_close)
win.mainloop()このようにTkinterでは、ボタンからの明示的なクローズだけでなく、OS標準の閉じる操作に対しても柔軟にイベント処理を組み込むことが可能です。
-
Tkinterウィンドウを常に他のウィンドウの最前面に表示する方法
GUIプログラムを作成する際、Tkinterのウィンドウはデフォルトでは他のアプリケーションの背後に表示されることがあります。つまり、プログラムを実行しても、そのウィンドウが他のソフトウェアの裏側に隠れてしまうケースがあるのです。 Tkinterウィンドウを常に他のウィンドウより前面に表示させたい場合は、attributes(-topmost, True) プロパティを使用します。この設定を行うことで、ウィンドウが最前面に固定され、ユーザーが他のアプリケーションを操作している間も、常に手前に表示され続けるようになります。 コード例 # ライブラリのインポート from tkinter impo
-
tkinterでウィンドウを閉じる方法|destroy()メソッドの使い方を解説
tkinterを使えば、Pythonで手軽にGUIアプリケーションを作成できます。しかし、タイトルバー右上の×ボタン以外の方法でウィンドウやフレームを閉じたい場合、どのように実装すればよいか悩むこともあるでしょう。そのようなときに役立つのが、ウィンドウを破棄して閉じるための .destroy() メソッドです。tkinterの各ウィジェットや属性は互いに独立しているため、「ウィンドウを閉じる処理」を専用の関数として分離して定義できます。これにより、ボタンのクリックイベントからウィンドウを閉じる動作を自由に制御可能です。サンプルコード# ライブラリをインポート from tkinter impo