首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python在Maya中创建一个新的图形编辑器?

如何使用Python在Maya中创建一个新的图形编辑器?
EN

Stack Overflow用户
提问于 2014-11-21 16:45:47
回答 1查看 2.6K关注 0票数 3

我想将图形编辑器中显示曲线和曲线名称的部分添加到我创建的菜单中。有人对我怎么做有什么建议吗?

更新

我试着得到类似于上面的图像。在图和外列上添加。我已经找到了outliner (cmds.outlinerPanel)的代码,但是我不太确定图:\

我在用maya 2014。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-22 21:17:41

好的。使用Maya创建图形编辑器面板的超级快速示例:

代码语言:javascript
复制
import maya.cmds as cmds

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

但是,对于将来,如果您想添加任何不能作为Maya命令使用的Maya小部件,您可以使用PySide的功能来做到这一点。下面是一个例子。这是我从Nathan在在Qt中嵌入Maya小部件PySide/Shiboken上发表的令人敬畏的文章中略为修改的代码

代码语言:javascript
复制
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()添加到实用程序模块中以供重用。

希望那是有用的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27066288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档