哪些事件可以绑定到Tkinter Frame?
我正在用Tkinter做一个小应用程序。我想在关闭窗口时调用一个函数来清理一些东西。我想把窗口的关闭事件和这个函数绑定在一起,但我不知道这是否可行,以及具体的步骤是什么。
Python的文档上说:查看bind手册和John Ousterhout书的第201页以获取详细信息
。
可惜的是,我手头没有这些资料。有没有人知道可以绑定的事件列表?
另外一个解决方案是把清理工作放在我的Frame类的__del__
方法里。但不知道为什么,这个方法似乎从来没有被调用过。有没有人知道可能是什么原因?是不是有循环依赖的问题?
一旦我添加了一个控件(在下面的代码中取消注释),__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()
2 个回答
3
关于事件的一个比较权威的资源是Tk的bind手册页。我不太清楚你具体想要做什么,但绑定"<Destroy>"
这个事件可能是你需要的。至于它是否真的能满足你的需求,我就不太确定了。
...
self.bind("<Destroy>", self.callback)
...
def callback(self, event):
print("callback called")
3
我觉得这个链接就是你可能在找的关于绑定的说明页面;我认为你想要绑定的事件是Destroy
。__del__
这个方法不太可靠(因为很难知道什么时候会因为循环引用的问题,比如父组件和子组件互相引用,而导致它无法触发!),所以使用事件绑定绝对是更好的选择。