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

2024-04-25 05:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

目标

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

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

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

信息:

  • 函数“destroy”启动
  • 我没有设法将主对象作为参数传输
  • 请忽略行首的点。堆栈交换编辑器不接受缩进代码

Tags: 方法函数代码masteruibinddefmore
1条回答
网友
1楼 · 发布于 2024-04-25 05:13:47

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

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

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

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

def destroy(master):
    master.destroy()

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

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

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

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

相关问题 更多 >