2014-09-29 8 views
0

Я создал ui с нуля, используя команды в документации Maya. Следующая функция, которую я написал применяется в двух scenerios:maya close window signal

  1. Когда пользователь нажал на другую кнопку - импорт, в котором он будет делать, что это было написано в коде, то закрыть его со следующим функция (см. readFile функция)
  2. Когда пользователь нажал на кнопку, где он закрывает пользовательский интерфейс, ничего не запуская.

В моем сценарии, чтобы удовлетворить вышеуказанные два сценария, я писал следующее где 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() 

как таковой, можно создать некоторые вроде сигнала в PyQt (clicked(), returnPressed() и т. д.), объединив вышеприведенное 2 (автоматическое + руководство), видя, что использование команды 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 и изменение фокуса отделенных из важных вещей, как изменение сцены. В вашем приложении это почти наверняка излишне. Вы используете только одну линию между закрытием и отменой, это не так уж плохо :)

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

Вы также можете использовать Maya QT непосредственно, чтобы попасть в закрытое мероприятие ... Опять же, кажется, излишним. Подробнее here

Смежные вопросы