純粋な Python Tkinter アプリケーションに使用できるクラッシュ レポートフレームワークはありますか? 理想的には、クロスプラットフォームで動作する必要があります。
実際には、Python インタープリター自体はほとんどクラッシュしないため、これは「例外報告」に近いものです。
クラッシュ レポーターの例を次に示します。
純粋な Python Tkinter アプリケーションに使用できるクラッシュ レポートフレームワークはありますか? 理想的には、クロスプラットフォームで動作する必要があります。
実際には、Python インタープリター自体はほとんどクラッシュしないため、これは「例外報告」に近いものです。
クラッシュ レポーターの例を次に示します。
try..except
どこでもコードを汚染するのではなく、独自の except フックを設定して実装する必要がありますsys.excepthook
。次に例を示します。
import sys
import traceback
def install_excepthook():
def my_excepthook(exctype, value, tb):
s = ''.join(traceback.format_exception(exctype, value, tb))
dialog = ErrorReportDialog(None, s)
dialog.exec_()
sys.excepthook = my_excepthook
install_exception()
アプリケーションの起動時に呼び出します。
ErrorReportDialog
私が作ったQtダイアログです。traceback.format_exception()
Python のインタプリタと同じ方法で、except フックに渡される引数をフォーマットします。
編集:私はそれに少し落とし穴を言及するのを忘れていました. スレッドでは機能しません (少なくとも、前回チェックしたときは機能しませんでした)。別のスレッドで実行されるコードについては、try..except
ブロックでラップする必要があります。
アプリケーションがクラッシュする可能性がある場所 (I/O、ネットワークなど) を除いて、試してみてください。except が呼び出されるたびに、古いウィンドウを強制終了する関数、新しい tkinter 通知ウィンドウを生成する関数、またはエラー メッセージを含むカスタムウィンドウを呼び出す関数を呼び出します。
新しいウィンドウで root.after を実行し、エラー レポート (urllib) を送信します。
必要に応じて再起動ボタンを配置します。
tkinter はそのタイプの GUI ではないため、クラッシュ レポート フレームワークはありません。これは、単純なコマンド ライン アプリのほとんどのラッパーです。
上のスクリーンショットに見られる機能が必要な場合は、pyqt/gtk または wxpython に移動します。しかし、どこへ行っても、自分のレポーターを書かなければならないことは確かです。