私は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コマンドを実行した後でコマンドを実行
- 2. Buttonコマンドの問題Tkinter Python
- 3. Android - Intercept Link from Webview
- 4. Intercept ActiveRecord establish_connection初期化プロセス
- 5. Pythonのexit(0)とexit(1)の違い
- 6. SDL exit fullscreen
- 7. Phonegap 1.5 - exit app
- 8. Pythonでexit whileループ
- 9. exit(0)vs return 0
- 10. Toast enter/exitのカスタムアニメーション?
- 11. Tkinter Entryウィジェットでコマンドが正しく動作しない
- 12. Tkinterコマンドの問題で子クラスのToplevelを使用する
- 13. Python Tkinterコマンドをクリックしてください
- 14. Python-Tkinter GUI
- 15. IFステートメントのGAMBAS - Exit Sub
- 16. エラーハンドラ - Exit Sub vs. End Sub
- 17. awk:ENDブロック内にexitをキャッチ
- 18. mysql with exit(1)from docker
- 19. exitをメインメニュー(Java)に戻す
- 20. exit()動作しません。
- 21. Android - editTextとsend/exitボタン
- 22. Pythonマルチスレッド化tkinter
- 23. Python GUI with Tkinter
- 24. Python Tkinter Enter Button
- 25. tkinterのAttributeError
- 26. googleのgoogle appsスクリプトのVBAの "Exit Sub and Exit For"と同じです。
- 27. superView intercept layoutSubviews:subviewsから作成できますか?
- 28. スプリングセキュリティで動的に<intercept-url pattern>を作成する3
- 29. tkinterとtkinterのインポートの違い
- 30. Tkinter root.after_cancel
可能重複[?私はTkinterでは、ウィンドウクローズイベントを処理するにはどうすればよいです](http://stackoverflow.com/questions/111155/how-do-i-handle-ウィンドウのclose-event-in-tkinter) – nbro