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

我相信是您可能一直在寻找的绑定手册页;我相信您要绑定的事件是Destroy. __del__不值得依赖(很难知道循环引用循环,例如父到子小部件并返回,何时会阻止它触发!),使用事件绑定绝对是可取的。

于 2009-07-29T14:59:32.783 回答
3

一个或多或少确定的事件资源是Tk 的绑定手册页。我不太清楚你想要做什么,但绑定"<Destroy>"可能是你正在寻找的事件。我不知道它是否能满足你的真正需要。

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