我正在尝试将一个侦听器附加到窗口关闭时被销毁的窗口对象。
但是,窗口对象没有一个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_listener
。 id_number
无法传递给add_listener
。我该怎么做才能解决这个问题?
答案 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)
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))
这不是最优雅的方式,但它应该工作.... 如果它不让我知道。