哪些事件可以绑定到Tkinter框架?

时间:2009-07-29 14:18:04

标签: python python-3.x tkinter

我正在使用Tkinter制作一个小应用程序。我希望在窗口关闭时调用的函数中清理一些东西。我正在尝试使用该函数绑定窗口的关闭事件。我不知道是否可能以及相应的序列是什么。

Python文档说:See the bind man page and page 201 of John Ousterhout’s book for details

不幸的是,我手中没有这些资源。有人知道可以绑定的事件列表吗?

另一种解决方案是清除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 个答案:

答案 0 :(得分:3)

我相信this是您可能一直在寻找的绑定手册页;我相信您尝试绑定的事件是Destroy。不要依赖__del__(太难以知道什么时候循环引用循环,例如父对子窗口小部件和后退,将阻止它触发!),使用事件绑定绝对是可取的。

答案 1 :(得分:3)

事件的一个或多或少的权威资源是bind man page for Tk。我不清楚你想要做什么,但"<Destroy>"上的约束可能是你正在寻找的事件。我不知道它是否真的需要你做的。

 ...
 self.bind("<Destroy>", self.callback)
 ...
 def callback(self, event):
     print("callback called")