2014-11-21 40 views
3

我想将图形编辑器的部分添加到我制作的菜单中,该部分显示曲线和曲线的名称。有没有人有任何建议,我怎么能做到这一点?如何使用Python在Maya中创建新的图形编辑器?

UPDATE

What I want added

我试图得到类似上图中的东西。 在图形和大纲图上添加。 我已经成功地找到了大纲(cmds.outlinerPanel)的代码,但我不那么肯定的图形:\

我使用Maya 2014

+0

您使用的是哪个版本的Maya? – kartikg3 2014-11-21 17:03:40

+0

另外,你可以发布你想要添加什么的屏幕截图吗? – kartikg3 2014-11-21 17:09:30

+0

好吧,当然是:) – 2014-11-22 20:49:50

回答

3

确定。使用玛雅CMDS创建一个图形编辑器面板超级简单的例子:

import maya.cmds as cmds 

cmds.window() 
cmds.frameLayout() 
cmds.animCurveEditor() 
cmds.showWindow() 

enter image description here

但是,对于未来,如果你想添加任何玛雅小部件,不可用作为玛雅命令,你可以使用PySide的能力来做到这一点。这是一个例子。这是代码,我稍微从内森·霍恩的真棒后修饰上embedding Maya UI widgets on Qt UIPySide/Shiboken

import maya.cmds as cmds 
import maya.OpenMayaUI as apiUI 
from PySide import QtCore, QtGui 
import shiboken 

def wrapinstance(ptr, base=None): 
    """ 
    Utility to convert a pointer to a Qt class instance (PySide/PyQt compatible) 
    :param ptr: Pointer to QObject in memory 
    :type ptr: long or Swig instance 
    :param base: (Optional) Base class to wrap with (Defaults to QObject, which should handle anything) 
    :type base: QtGui.QWidget 
    :return: QWidget or subclass instance 
    :rtype: QtGui.QWidget 
    """ 
    if not globals().has_key('QtCore') or not globals().has_key('QtGui'): 
     return None 

    if ptr is None: 
     return None 
    ptr = long(ptr) # Ensure type 
    if globals().has_key('shiboken'): 
     if base is None: 
      qObj = shiboken.wrapInstance(long(ptr), QtCore.QObject) 
      metaObj = qObj.metaObject() 
      cls = metaObj.className() 
      superCls = metaObj.superClass().className() 
      if hasattr(QtGui, cls): 
       base = getattr(QtGui, cls) 
      elif hasattr(QtGui, superCls): 
       base = getattr(QtGui, superCls) 
      else: 
       base = QtGui.QWidget 
     return shiboken.wrapInstance(long(ptr), base) 
    elif globals().has_key('sip'): 
     base = QtCore.QObject 
     return sip.wrapinstance(long(ptr), base) 
    else: 
     return None 

def getMayaWindow(): 
    ptr = apiUI.MQtUtil.mainWindow() 
    return wrapinstance(long(ptr), QtCore.QObject) 

def toQtObject(mayaName): 
    ''' 
    Given the name of a Maya UI element of any type, 
    return the corresponding QWidget or QAction. 
    If the object does not exist, returns None 
    ''' 
    ptr = apiUI.MQtUtil.findControl(mayaName) 
    if ptr is None: 
     ptr = apiUI.MQtUtil.findLayout(mayaName) 
    if ptr is None: 
     ptr = apiUI.MQtUtil.findMenuItem(mayaName) 
    if ptr is not None: 
     return wrapinstance(long(ptr), QtCore.QObject) 

class MayaSubWindow(QtGui.QMainWindow): 
    def __init__(self, parent=getMayaWindow()): 
     super(MayaSubWindow, self).__init__(parent) 
     qtObj = toQtObject(cmds.animCurveEditor()) 
     #Fill the window, could use qtObj.setParent 
     #and then add it to a layout. 
     self.setCentralWidget(qtObj) 

myWindow = MayaSubWindow() 
myWindow.show() 

即使这是一个看似很长一段代码,你可以安全地添加wrapinstance()getMayaWindow()toQtObject()对再利用的实用程序模块。

希望是有用的。

+0

这太棒了!正是我在找什么。 我发现了cmd行animCurveEditor,但我从未将它包含在窗口中,所以我只是假定它是用于编辑预先存在的图形编辑器。 这很好,谢谢! – 2014-11-23 12:02:21

相关问题