概要
小ネタ。
スクリプト書いていると、たまに処理完了したから、メッセージボックス表示したいときがあります。
たまに、バッチファイル作って、そこから表示しているサンプルも見るのですが
pythonに標準搭載されている tkinter にメッセージボックスがあるので
それ使う方が楽です。さらに、各プラットフォーム毎のネイティブダイアログで表示してくれるので
見た目も変じゃないし。
tkinter.messagebox
tkinter で メッセージボックスを表示するには、以下のようにします。
from tkinter import Tk, messagebox root = Tk() root.withdraw() messagebox.showinfo(title, message) # 情報ダイアログ表示 root.quit()
簡単。
ついでにデコレータ化
上記の処理を、関数にでもして、そのまま使ってもいいのですが
大抵、こういう処理って、デバッグするときにもちょこっと使ったりします。
デバッグ時に入れる処理ってのは、後から削除する必要がある場合が多いので
あんまり、元のコードの部分に手をいれたくないです。
てことで、以下のようにデコレータにしておいて
def show_complete_dialog(func): from functools import wraps @wraps(func) def _wrapper(*args, **kwargs): from datetime import datetime from tkinter import Tk, messagebox results = func(*args, **kwargs) root = Tk() root.withdraw() messagebox.showinfo('DONE', f'{func.__name__} is DONE at [{datetime.now()}].') root.quit() return results return _wrapper
以下のように付与すると、処理終了時に完了ダイアログが出てくれます。
import time @show_complete_dialog def func1(): print('処理開始') time.sleep(5) print('処理終了') func1()
ちなみに、今回のサンプルでは OKボタンしかないメッセージボックス使っているので
戻り値は受けていませんが、他のダイアログの場合は、結果をもらって
messageboxに定義されている各定数と比較することで、どのボタンが押下されたのかはわかります。
dialog_result = messagebox.showinfo(titlie, message)
assert dialog_result == messagebox.OK
参考情報
25.1. tkinter — Tcl/Tk の Python インタフェース — Python 3.6.3 ドキュメント
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場