从另一个方法获取 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()
这会导致错误!我怎样才能通过这个方法到达我想要销毁的对象?
信息:
- 函数 'destroy' 启动
- 我没能将主对象作为参数传输
- 请忽略行首的点。 Stack Exchange 编辑器不接受缩进代码。
选项 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()
函数中做其他事情,这不是一个选项。
目标
我想创建一个弹出窗口 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()
这会导致错误!我怎样才能通过这个方法到达我想要销毁的对象?
信息:
- 函数 'destroy' 启动
- 我没能将主对象作为参数传输
- 请忽略行首的点。 Stack Exchange 编辑器不接受缩进代码。
选项 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()
函数中做其他事情,这不是一个选项。