【问题标题】:Which events can be bound to a Tkinter Frame?哪些事件可以绑定到 Tkinter 帧?
【发布时间】:2010-11-15 02:17:07
【问题描述】:

我正在使用 Tkinter 制作一个小型应用程序。我想在关闭窗口时调用的函数中清理一些东西。我正在尝试将我的窗口的 close 事件 与该函数绑定。不知道有没有可能,对应的顺序是什么。

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()

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

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

    【讨论】:

    • 完美运行。非常感谢。我同意循环引用是个噩梦。
    • 我认为如果指向手册页的链接不是普林斯顿的个人帐户,这将是一个更好的答案。 tcl.tk/man 上有一组官方手册页。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢答案和链接。不幸的是,我只能选择正确的答案。但我投了赞成票:-)
    猜你喜欢
    • 2011-11-09
    • 1970-01-01
    • 2013-08-15
    • 2016-07-20
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多