【问题标题】:maya close window signalmaya 关闭窗口信号
【发布时间】:2014-09-30 00:05:59
【问题描述】:

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

  1. 当用户点击另一个按钮 - 导入时,它将按照代码中所写的方式执行,然后使用以下函数将其关闭(参见 readFile 函数)
  2. 当用户单击按钮关闭 UI 而不运行任何东西时。

在我的脚本中,为了满足上述两种情况,我编写如下,其中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 命令用法是一样吗?

【问题讨论】:

    标签: python button maya


    【解决方案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 中,这是一种很好的方式,可以将按钮高亮和焦点更改等小事与改变场景等重要内容分开。在您的应用程序中,这几乎肯定是矫枉过正。您在关闭和取消之间只共享 1 行,这还不错:)

    这里的more background on on pseudo-events in maya gui

    您也可以直接使用 Maya 的 QT 来获得关闭事件...再次,似乎有点矫枉过正。更多here

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 2021-05-18
      • 2015-01-08
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      相关资源
      最近更新 更多