我使用tkinter模块在python中有一些代码。我一直在尝试将功能绑定到"<Destroy>"
,但是每次运行代码并关闭窗口时,绑定的功能将执行5次。这是代码:
def bind_events(self):
''' binding the events to their functions '''
self.master.bind("<Destroy>", lambda x: print("OK"))
此代码是一个类函数。然后输出我得到这个:
>>> OK
OK
OK
OK
OK
此问题是否有解决方案?谢谢您的时间,对不起我的英语。
答案 0 :(得分:2)
如果将事件绑定到根窗口,则该绑定将附加到每个窗口小部件。因此,如果您有一个包含四个其他小部件的根窗口,则销毁该窗口时,绑定函数将被调用五次-每个小部件一次。
看到这种情况的一种简单方法是修改函数,使其不仅打印“确定”,而且还打印与事件关联的小部件:
self.master.bind("<Destroy>", lambda event: print("{}: OK".format(event.widget)))
这与以下事实有关:您实际上并没有绑定到窗口小部件本身,而是要绑定到具有相同名称的绑定标签小部件。每个小部件除了自身之外,还具有一组与之关联的绑定标签:
因此,当您绑定到根窗口时,任何小部件都会继承该绑定。如果要绑定到根窗口,而仅绑定到根窗口,最常见的解决方案是绑定到一个函数,在该函数中,仅对窗口小部件执行操作就是根窗口。
例如:
def on_destroy(self, event):
if event.widget == self.master:
print("{}: OK".format(event.widget))
self.master.bind("<Destroy>", self.on_destroy)