玛雅关闭窗口信号

时间:2014-09-29 07:48:17

标签: python button maya

我使用Maya文档中的命令从头创建了一个ui。 我写的以下函数适用于两个场景:

  1. 当用户点击另一个按钮 - 导入时,它将按照代码中的内容执行,然后使用以下功能将其关闭(请参阅readFile功能)
  2. 当用户点击按钮关闭UI而不运行任何内容时。
  3. 在我的脚本中,为了满足上述两种情况,我写了以下内容,其中closeWindow迎合了场景1,而cancelWindow迎合了场景2

    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 个答案:

答案 0 :(得分: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)

在一个大型复杂的用户界面中,这是一个很好的方法,可以保持按钮高光和焦点变化之类的小问题,例如更改场景等重要内容。在你的应用程序中,它几乎肯定是矫枉过正的。你只在关闭和取消之间共享一条线,这不是太糟糕:)

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

你也可以直接使用Maya的QT来结束比赛......再次,看起来有点矫枉过正。更多here