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

Python 从另一个方法获取TK()对象 球门,python,object,tkinter,Python,Object,Tkinter,我想创建一个带有按钮的弹出窗口,当鼠标离开窗口时,该窗口将关闭。(它是程序的子菜单) 要做到这一点,我有一个函数,如果弹出窗口应该被打开调用。它包含以下代码: master = Tk() fpy.ui.menu.submenu(master=master,[...more parameters...]) mainloop() 还有一个方法(fpy.ui.menu.submenu(…)来创建其他所有内容。 此功能应尽可能保持清洁。这是我为未来项目构建的API的一部分 def submenu(ma

我想创建一个带有按钮的弹出窗口,当鼠标离开窗口时,该窗口将关闭。(它是程序的子菜单)

要做到这一点,我有一个函数,如果弹出窗口应该被打开调用。它包含以下代码:
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()
这将导致错误!我如何通过这种方法到达我想要摧毁的目标

信息:
  • 函数“destroy”启动
  • 我没有设法将主对象作为参数传输
  • 请忽略行首的点。堆栈交换编辑器不接受缩进代码
选项1:将其作为参数传递 您可以使用
lambda
语句将其传递给
destroy()
函数:

a_frame.bind("<Leave>", lambda: destroy(master))
选项2:直接调用master上的destroy方法 与前面的
lambda
语句相同,只是现在我们直接调用该方法,而不是在另一个函数中处理它

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

当然,如果您想在
destroy()
函数中执行其他操作,这不是一个选项。

如果您没有将
master
作为参数传入,则需要在您使用的任何类的顶部将其定义为
self.master=master
。然后调用self.master.destroy()堆栈交换编辑器不接受缩进代码是什么意思?缩进代码工作得很好。我已经删除了这些点,因为代码在其他方面是非法的语法。好吧,您建议的代码只需稍加修改即可工作:
a_frame.bind(“,lambda x:master.destroy())
。我不知道为什么我需要x在那里,但现在它工作了。
a_frame.bind("<Leave>", lambda: master.destroy())
def destroy(master):
    master.destroy()
a_frame.bind("<Leave>", lambda: master.destroy())