私はPythonでTkinterを使ってクライアント/サーバプログラムを書いています。私は接続されたクライアントを追跡するためにサーバーが必要です。このため、終了ボタン(コーナーの標準の「X」)をクリックした後、クライアントにサーバーに自動化されたメッセージを送信させたいと思います。ユーザーがプログラムを終了したときをどのように知ることができますか?Intercept Tkinter "Exit"コマンド?
答えて
トップレベルウィンドウのメソッドを使用します。具体的には、WM_DELETE_WINDOW
プロトコルに興味があります。このメソッドを使用すると、ウィンドウが破棄されたときに呼び出されるコールバックを登録できます。
使用法:
root.protocol("WM_DELETE_WINDOW", app.on_delete)
私は 'root.mainloop()'を呼び出す前に 'root.protocol(" WM_DELETE_WINDOW "、app.on_delete())'という行を追加しましたが、 'on_delete () 'がウィンドウが開かれたときに呼び出され、閉じられていないときに呼び出されます。私は何か間違っているのですか? – John
@ John: 'protocol'メソッドは関数への参照をとります。末尾の括弧を追加することによって、 'app.on_delete'を呼び出し、そのメソッドの結果をプロトコルハンドラに渡します。正しい使用法は 'root.protocol(" WM_DELETE_WINDOW "、app.on_delete)' –
パーフェクト!ありがとう! – John
FWIW:それはウィジェット固有の動作を割り当てることも可能です。
特定のウィジェットが破棄されたときにアクションが発生するようにするには、destroy()メソッドをオーバーライドすることを検討してください。 、フレーム「F」は「B1」と子供と、破壊された「B2」ボタンが押され
class MyButton(Tkinter.Button):
def destroy(self):
print "Yo!"
Tkinter.Button.destroy(self)
root = Tkinter.Tk()
f = Tkinter.Frame(root)
b1 = MyButton(f, text="Do nothing")
b1.pack()
f.pack()
b2 = Tkinter.Button(root, text="f.destroy", command=f.destroy)
b2.pack()
root.mainloop()
次の例を参照してください「ヨ!」印刷されます。
私は同じ回答をthis topicに掲載しました。私の場合は
、次のコードは動作しませんでした:
root.protocol("WM_DELETE_WINDOW", app.on_delete) # doesn't work
はしかし、それは、このフォームを使用して働いていた:
root.wm_protocol ("WM_DELETE_WINDOW", app.on_delete) # does work
'.protocol'を使う答えはありませんが、受け入れられた答えはすでに' .wm_protocol'を使うと言われています。 – ArtOfWarfare
あなたのpython atexit
モジュールを使用することができます。例えば
:
import atexit
def doSomethingOnExit():
pass
atexit.register(doSomethingOnExit)
の
これは私にとって完璧に機能しました。他のものは決して誘発されなかった。 – ArtOfWarfare
- 1. "exit"を実行しているときに無効なコマンド名 "exit"
- 2. コマンドtkinterのラジオボタン
- 3. java.lang.NoClassDefFoundError:com.example.api.retrofit.AuthenticationInterceptor $ intercept $ 1
- 4. シェルスクリプト:シェルスクリプトでexitコマンドを実行した後でコマンドを実行
- 5. tkinterウィンドウでExit(または[X])を無効にする
- 6. Camel intercept/marshal jms reply
- 7. Android - Intercept Link from Webview
- 8. Buttonコマンドの問題Tkinter Python
- 9. Tkinterのチェックボックスは、**コマンド添付**
- 10. パイソン - Tkinterの - コマンドの引数
- 11. Tkinter複数のコマンドとdef
- 12. Spring AOPのlog4j2のIntercept ThreadContext
- 13. Intercept ActiveRecord establish_connection初期化プロセス
- 14. ssh exitコマンドの実行を確認する方法は?
- 15. Springシェルでexit built inコマンドを実行するには?
- 16. Azure 'exit'コマンドを無視して関数を実行する
- 17. 端末がbashスクリプトのexitコマンドの後にフリーズする
- 18. Pythonのexit(0)とexit(1)の違い
- 19. Exit Wait For Exitが動作しない
- 20. Tkinterボタンへのコマンドの割り当て
- 21. ボタンにコマンドを割り当てる - Tkinter
- 22. Intercept COM dllhost.exeの呼び出し
- 23. Node.js interceptプロンプトと詳細なレスポンス
- 24. TestNgコンソールアプリケーションExit with
- 25. Exit opened Application
- 26. WPF action befor exit
- 27. SDL exit fullscreen
- 28. Docker mysql instant exit
- 29. SegFault on application exit
- 30. os.system( 'exit')のトラブル
可能重複[?私はTkinterでは、ウィンドウクローズイベントを処理するにはどうすればよいです](http://stackoverflow.com/questions/111155/how-do-i-handle-ウィンドウのclose-event-in-tkinter) – nbro