Python 包装器的循环参数要求

Python 包装器的循环参数要求,python,algorithm,python-2.x,maya,Python,Algorithm,Python 2.x,Maya,我试图将侦听器附加到窗口对象,该对象在窗口关闭时被破坏 但是,窗口对象没有单击X以关闭时调用的OnClosetype方法(如果您想知道原因,它是Autodesk Maya的pymel.core.uitypes.window) add_listener创建活动会话中存在的侦听器附加\u侦听器我创建的目的是在窗口关闭时使侦听器删除自身,并要求附加一个窗口 我的解决办法如下: def attach_listener(window, event_name, function): def wrap

我试图将侦听器附加到窗口对象,该对象在窗口关闭时被破坏

但是,窗口对象没有单击X以关闭时调用的
OnClose
type方法(如果您想知道原因,它是Autodesk Maya的
pymel.core.uitypes.window

add_listener
创建活动会话中存在的侦听器<代码>附加\u侦听器我创建的目的是在窗口关闭时使侦听器删除自身,并要求附加一个窗口

我的解决办法如下:

def attach_listener(window, event_name, function):
    def wrapper(*args, **kwargs):
        if window.exists():
            return function(*args, **kwargs)
        else:
            remove_listener(id_number)
    id_number = add_listener(event_name, wrapper)
这显然不起作用,因为在声明函数之前,
id\u number
是没有定义的,但是,如果不先定义它,我就无法将函数传递给
add\u listener
<代码>id\u编号无法传递到
添加\u侦听器
。我该怎么做才能避免这种情况?

嘘:\ 你可以用以下方法破解它;我想这会有用的

def attach_listener(window, event_name, function):
    IDlist = []
    def wrapper(*args, **kwargs):
        if window.exists():
            return function(*args, **kwargs)
        else:
            remove_listener(IDlist[0])
    IDlist.append(add_listener(event_name, wrapper))
这不是最优雅的方式,但它应该能起作用。。。。
如果它不让我知道。

您可以尝试这种方法:

def attach_listener(window, event_name, function):
    def wrapper(*args, **kwargs):
        if window.exists():
            return function(*args, **kwargs)
        else:
            remove_listener(wrapper.id_number)
    wrapper.id_number = add_listener(event_name, wrapper)

不幸的是,Maya在Python2.6中运行,因此不存在
非本地