我对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)
答案 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")
由于您没有告诉我们您希望放置按钮的位置,因此如果您想要更合适的内容,则必须编辑您的问题。