2012-04-24 56 views
1

我试图将一个侦听器附加到窗口关闭时销毁的窗口对象。包装的圆形参数要求

但是,该窗口对象没有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。我该怎么做才能解决这个问题?

回答

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

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

+0

不幸的是,玛雅运行在Python 2.6,所以'nonlocal'不存在。 – TorelTwiddler 2012-04-24 23:05:45