如何使用PySide将新按钮添加到Maya中的通道盒?

时间:2016-03-03 01:13:08

标签: python pyqt pyside maya

我对PySide有一个非常基本的了解。我希望为现有的Channel Box提供一个按钮。但是我不确定在获取主要的Maya窗口之外从哪里开始。 (但我甚至不确定这是否正确):

from PySide import QtGui, QtCore
from shiboken import wrapInstance
from maya.OpenMayaUI import MQtUtil

channelBox = wrapInstance(long(MQtUtil.findControl('mainChannelBox')), QtGui.QWidget)

1 个答案:

答案 0 :(得分:2)

搞乱Maya的UI可能是一项艰巨的任务,有两种方法可以做到这一点。 首先是使用maya.cmds向Maya的UI添加小部件。第二个是像Qt类一样包装Maya小部件。

这是一个类似的问题:How do I parent new, user-created buttons inside the Graph Editor window? 我只回答了maya.cmds代码,还有一个其他答案可能会让您感兴趣并使用PySide。

这是一个解决方案:

nbIteration = 0
def getChildren(uiItem, nbIteration):
    for childItem in cmds.layout(uiItem, query=True, childArray=True):
        try:
            print "|___"*nbIteration + childItem
            getChildren(uiItem + "|" + childItem, nbIteration+1)
        except:
            pass
getChildren("MayaWindow|MainChannelsLayersLayout", nbIteration)

如果您运行此代码,这将为您提供Channel Box / Layer Editor

中包含的小部件的名称
ChannelButtonForm <-- This is the form containing the 3 buttons on the top-right 
|___cbManipsButton
|___cbSpeedButton
|___cbHyperbolicButton
ChannelsLayersPaneLayout <-- This is the layout containing the channel box and the layer editor. A paneLayout has a splitter to resize his childrens.
|___ChannelBoxForm 
|___|___menuBarLayout1 
|___|___|___frameLayout1
|___|___|___|___mainChannelBox
|___LayerEditorForm
|___|___DisplayLayerUITabLayout
|___|___|___DisplayLayerTab
|___|___|___|___formLayout3

根据您要按下按钮的位置,您必须选择布局作为按钮的父级。

在这种情况下,我在Channel Box / Layer Editor的左上角放置一个按钮,与3 checkboxButtons处于同一级别。

import maya.cmds as cmds

cmds.button("DrHaze_NewButton", l="HELLO", p="MayaWindow|MainChannelsLayersLayout|ChannelButtonForm")

由于您没有告诉我们您希望放置按钮的位置,因此如果您想要更合适的内容,则必须编辑您的问题。