我使用Maya文档中的命令从头创建了一个ui。 我写的以下函数适用于两个场景:
readFile
功能)在我的脚本中,为了满足上述两种情况,我写了以下内容,其中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
命令用法是一样的吗?
答案 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