包装器的循环参数要求

时间:2012-04-24 19:07:52

标签: python algorithm python-2.x maya

我正在尝试将一个侦听器附加到窗口关闭时被销毁的窗口对象。

但是,窗口对象没有一个OnClose类型的方法,可以通过单击X来关闭它(如果你很好奇,可以使用Autodesk Maya的pymel.core.uitypes.Window。)

add_listener创建一个存在于活动会话中的侦听器。 attach_listener我正在创建以使侦听器在窗口关闭时自行移除,并且需要附加一个窗口。

我的解决方案如下:

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_number直到声明函数后才定义,但是,我不能在不先定义函数的情况下将函数传递给add_listenerid_number无法传递给add_listener。我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以尝试这种方法:

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)

答案 1 :(得分:0)

Shucks:\ 你可以用以下方式破解它;我认为这会奏效......

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))

这不是最优雅的方式,但它应该工作.... 如果它不让我知道。