2014-09-29 47 views
0

我已經使用Maya文檔中的命令從頭創建了一個ui。 ,我已經寫了下面的功能適用兩種scenerios:maya關閉窗口信號

  1. 當用戶點擊到另一個按鈕 - 導入,其中還會像它寫的代碼,然後用下面的關閉關閉功能(請參閱readFile函數)
  2. 當用戶點擊按鈕時關閉UI而不運行任何內容。

在我的劇本,以應付上述兩種情況下,我寫爲下面的其中closeWindow是迎合Scenario1和cancelWindow是迎合Scenario2

def ui(self): 
    ... 
    cancelButton = cmds.button(label='Cancel', command=self.cancelWindow, width=150, height=35) 

def closeWindow(self, *args): 
    cmds.deleteUI(self.window, window=True) 

def cancelWindow(self, *args): 
    cmds.delete(camSel[0]) 
    cmds.deleteUI(self.window, window=True) 

def readFile(self, *args): 
    ... 
    self.closeWindow() 

這樣,是有可能創造一些通過結合上述2(自動+手動),看到類似於PyQt(clicked(),returnPressed()等)的信號,看到deleteUI命令的用法是相同的?

回答

1

默認的Maya UI只提供回調,不提供信號。您可以通過調用事件處理程序對象而不是函數來創建一種'僞信號'。在這種情況下,按鈕只知道'我已經觸發了按鈕事件',並且處理程序可以根據需要調用盡可能多的功能。

class Handler(object): 

    def __init__(self): 
     self.handlers = [] 

    def add_handler (self, func): 
     self.handlers.append(func) 

    def __call__(self, *args, **kwargs): 
     for eachfunc in handler: 
      eachfunc(*args, **kwargs) 

hndl = Handler() 
hndl.add_handler(function1) # do some ui work... 
hndl.add_handler(function2) # do some scene work... 
hndl.add_handler(function3) # do something over network, etc.... 

b = cmds.button('twoFunctions', c = Hndl) 

在大型複雜的UI這是一個很好的方式,讓小事情像按鈕higlights和注意力從重要的東西,如改變場景中分離出來的變化。在你的應用程序中,它幾乎肯定是矯枉過正。你只有在關閉和取消之間共享1行,這不算太糟:)

Heres'more background on on pseudo-events in maya gui

您也可以直接使用Maya的QT來獲得關閉事件...再次,似乎是矯枉過正。更多here