2012-04-24 53 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