質問

Tkinterを使用して小さなアプリケーションを作成しています。私のウィンドウが閉じられたときに呼び出される関数でいくつかのことをきれいにしたいと思います。ウィンドウの closeイベントをその関数にバインドしようとしています。それが可能かどうか、また対応するシーケンスは何ですか?

Pythonのドキュメントには、See the bind man page and page 201 of John Ousterhout’s book for detailsと記載されています。

残念ながら、これらのリソースは手元にありません。バインドできるイベントのリストを知っている人はいますか?

別の解決策は、Frameクラスの__del__内のすべてを消去することです。理由は不明ですが、呼び出されることはないようです。誰が原因を知っていますか?いくつかの循環依存関係?

コントロールを追加するとすぐに(以下のコードではコメントを外します)、<=>はもう呼び出されません。その問題の解決策はありますか?

from tkinter import *

class MyDialog(Frame):
    def __init__(self):
        print("hello")
        self.root = Tk()
        self.root.title("Test")

        Frame.__init__(self, self.root)
        self.list = Listbox(self, selectmode=BROWSE)
        self.list.pack(fill=BOTH, expand=1)
        self.pack(fill=BOTH, expand=1)


    def __del__(self):
        print("bye-bye")

dialog = MyDialog()
dialog.root.mainloop()
役に立ちましたか?

解決

これはあなたが持っているかもしれないバインドマニュアルページだと信じています探していた;バインドしようとしているイベントはDestroyです。 __del__に依存することはありません(たとえば、親子ウィジェットとその逆などの循環参照ループがトリガーを停止するタイミングを知るのは非常に困難です!)、イベントバインディングを使用することは間違いなく望ましいです。

他のヒント

イベントの決定的なリソースは、バインドのmanページです。 Tkの場合。あなたが何をしたいのかは明確ではありませんが、"<Destroy>"のバインドはおそらくあなたが探しているイベントでしょう。本当に必要なことを行うかどうかはわかりません。

 ...
 self.bind("<Destroy>", self.callback)
 ...
 def callback(self, event):
     print("callback called")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top