1

我正在尝试将侦听器附加到窗口关闭时被破坏的窗口对象。

但是,窗口对象没有OnClose通过单击 X 关闭来调用的类型方法(pymel.core.uitypes.Window如果您好奇为什么,它是 Autodesk Maya 的)。

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_numberadd_listener

4

2 回答 2

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)
于 2012-04-24T23:08:17.347 回答
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))

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

于 2012-04-24T21:36:19.310 回答