tkinter-protocol-破棄ウィンドウの作成
WM_DELETE_WINDOW
Tkinterは、イベントバインディングに加えて、プロトコルハンドラと呼ばれるメカニズムをサポートします.プロトコルとは、アプリケーションとウィンドウマネージャの相互作用です.最も一般的なプロトコルは、
独自のハンドラ
例:ウィンドウxをクリックして終了すると、確認画面が追加される(
However, as of Python 1.5.2, Tkinter will not destroy the corresponding widget instance hierarchy, so it is a good idea to always register a handler yourself
トップウィンドウでWM_でない場合でもご注意くださいDELETE_WINDOW登録処理プログラムは、このウィンドウ自体も通常通り破棄される(制御方式でXとは異なる).ただし、Python 1.5.2からTkinterは対応するウィンドウウィジェットインスタンス階層を破壊しないため、常に自分でプロセッサを登録するのが良いアイデアです.
Other Protocols
ウィンドウマネージャプロトコルは、最初はXウィンドウシステムの一部(Inter-client Communication Conventions Manual,or ICCCMという名前のドキュメントで定義されています).このプラットフォームでは、
原文リンク:protocols
Tkinterは、イベントバインディングに加えて、プロトコルハンドラと呼ばれるメカニズムをサポートします.プロトコルとは、アプリケーションとウィンドウマネージャの相互作用です.最も一般的なプロトコルは、
WM_DELETE_WINDOW
と呼ばれ、ユーザがウィンドウマネージャを使用してウィンドウを明示的に閉じるときに発生する状況を定義するために使用される.プロトコル・メソッドを使用して、このプロトコルにハンドラをインストールできます(ウィジェットはルートまたはトップレベルのプラグインでなければなりません):widget.protocol("WM_DELETE_WINDOW", handler)
独自のハンドラ
handler
が定義されると、Tkinterはウィンドウを自動的に閉じることはなくなります.逆に、メッセージ・ボックスを表示して、ユーザーに現在のデータを保存すべきかどうかを尋ねるか、場合によってはリクエストを無視するだけでよい場合があります.このプロセッサからウィンドウを閉じるには、ウィンドウのdestroyメソッドを呼び出すだけです.例:ウィンドウxをクリックして終了すると、確認画面が追加される(
tkinter.messagebox.askokcancel()
)from tkinter import Tk
from tkinter import messagebox
#tkinter
root = Tk()
# x ,
def on_closing():
if messagebox.askokcancel("Quit", "Do you want to quit?"):
root.destroy()
# WM_DELETE_WINDOW ,
root.protocol('WM_DELETE_WINDOW', on_closing)
root.mainloop()
However, as of Python 1.5.2, Tkinter will not destroy the corresponding widget instance hierarchy, so it is a good idea to always register a handler yourself
トップウィンドウでWM_でない場合でもご注意くださいDELETE_WINDOW登録処理プログラムは、このウィンドウ自体も通常通り破棄される(制御方式でXとは異なる).ただし、Python 1.5.2からTkinterは対応するウィンドウウィジェットインスタンス階層を破壊しないため、常に自分でプロセッサを登録するのが良いアイデアです.
top = Toplevel(...)
# make sure widget instances are deleted
top.protocol("WM_DELETE_WINDOW", top.destroy)
Other Protocols
ウィンドウマネージャプロトコルは、最初はXウィンドウシステムの一部(Inter-client Communication Conventions Manual,or ICCCMという名前のドキュメントで定義されています).このプラットフォームでは、
WM_TAKE_FOCUS
やWM_SAVE_YOURSELF
などの他のプロトコルのプロセッサをインストールすることもできます.詳細については、ICCCMドキュメントを参照してください.原文リンク:protocols