2016-03-03 1 views
0

У меня есть основное понимание PySide. Я надеюсь разместить родительскую кнопку в существующем Channel Box. Однако я не уверен, с чего начать за пределами главного окна майя. (Но я даже не уверен, что это правильно):Как я могу создать новую кнопку для канала в Maya с помощью PySide?

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 может быть трудной задачей, есть два способа сделать это. Прежде всего, необходимо использовать maya.cmds, чтобы добавить виджеты в пользовательский интерфейс Maya. Второй - обернуть, как и вы, виджет майя в классе Qt.

аналогичный вопрос здесь: 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") 

Как вы не сказали нам, где вы хотите, чтобы ваша кнопка для размещения, вы должны изменить свой вопрос, если вы хотите что-то более подходящим.

+0

Это замечательно. Спасибо! Я также пытаюсь создать родительскую кнопку внутри редактора графов и Outliner. Использование вышеприведенной команды как 'getChildren (« graphEditor1Window | », nbIteration), похоже, не работает. В нем говорится, что он не может найти редактор графов, хотя 'cmds.lsUI' говорит, что он существует. – john

+0

Попробуйте следующее: 'getChildren (" graphEditor1Window | TearOffPane ", nbIteration)' Вам нужно передать макет функции 'getChildren'. – DrHaze

+0

И для Outliner: 'getChildren (" sequenceEditorPanel1Window | TearOffPane ", nbIteration)' – DrHaze

 Смежные вопросы

  • Нет связанных вопросов^_^