从另一个方法获取 TK() 对象

Get a TK() object from another method

目标

我想创建一个弹出窗口 window,其中的按钮会在鼠标离开 window 时关闭。 (它是一个程序的子菜单)。

为此,我有一个函数,如果应该打开弹出窗口 window 则调用该函数。它包含以下代码:
master = Tk()
fpy.ui.menu.submenu(master=master,[...more parameters...])
mainloop()

和一种方法 (fpy.ui.menu.submenu(...)) 来创建其他所有内容。 此功能应尽可能保持干净。这是我为未来项目构建的 API 的一部分。

def submenu(master,[...more parameters...]):
    master.overrideredirect(True)
    a_frame = Frame(master, bg="grey")
    #[codeblock to generate buttons]
    a_frame.bind("<Leave>", destroy)
    a_frame.pack()
a_frame.bind("<Leave>", destroy)

当鼠标离开框架时调用函数'function'。现在我的问题开始了。 'destroy' 函数应该破坏我的根(在本例中称为 master)。

问题:

def destroy():
    #how can I get the master-object?
    master.destroy()

这会导致错误!我怎样才能通过这个方法到达我想要销毁的对象?

信息:

选项 1:将其作为参数传递

您可以使用 lambda 语句将其传递给您的 destroy() 函数:

a_frame.bind("<Leave>", lambda: destroy(master))

然后修改你的销毁函数的签名:

def destroy(master):
    master.destroy()

方案二:直接调用master的destroy方法

与以前相同的 lambda 语句,除了现在我们直接调用该方法而不是在另一个函数中处理它。

a_frame.bind("<Leave>", lambda: master.destroy())

当然,如果您想在 destroy() 函数中做其他事情,这不是一个选项。