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

时间:2015-01-22 16:39:23

标签: python object tkinter

目标

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

为此,我有一个函数,如果应该打开弹出窗口,则调用该函数。它包含以下代码:
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)

调用函数&#39;函数&#39;当鼠标离开框架时。现在我的问题开始了。 &#39;销毁&#39;函数应该破坏我的根(在这种情况下称为master)。

问题:

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

这会导致错误!如何通过此方法到达我想要销毁的对象?

的信息:

  • 功能&#39;销毁&#39;开始使用
  • 我没有设法将主对象作为参数传输
  • 请忽略一行开头的点。 Stack Exchange编辑器不接受缩进代码。

1 个答案:

答案 0 :(得分:0)

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

您可以使用destroy()声明将其传递给lambda函数:

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

然后修改销毁功能的签名:

def destroy(master):
    master.destroy()

选项2:直接在master上调用destroy方法

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

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

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