我有一些使用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这个问题有什么解决办法吗?感谢您的宝贵时间,并为我的英语道歉。
发布于 2019-10-11 02:23:54
如果将事件绑定到根窗口,则该绑定将附加到每个小部件。因此,如果您有一个包含四个其他小部件的根窗口,当您销毁该窗口时,您的绑定函数将被调用五次-每个小部件一次。
查看这种情况的一种简单方法是修改您的函数,使其不仅打印"OK",还打印与事件关联的小部件:
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)https://stackoverflow.com/questions/58328686
复制相似问题