1

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

Python のドキュメントには次のように書かれていますSee the bind man page and page 201 of John Ousterhout’s book for details

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

__del__別の解決策は、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()
4

2 に答える 2

3

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

 ...
 self.bind("<Destroy>", self.callback)
 ...
 def callback(self, event):
     print("callback called")
于 2009-07-29T15:02:49.050 に答える
3

これは、あなたが探していたバインドのマニュアル ページだと思いますあなたがバインドしようとしているイベントはDestroy. __del__依存するべきではありません (親ウィジェットから子ウィジェットへの循環参照ループがトリガーを停止するタイミングを知るのが難しすぎます!)。

于 2009-07-29T14:59:32.783 に答える