Home  Previous Next

命令 (MEL/Python)

MGPickerUserPanel

跳转到: 概要. MEL例子. Python例子.

概要

MGPickerUserPanel (string, [allowedAreas=[UnsignedInt]],[allIds=[boolean]], [dockArea=UnsignedInt], [dockFeatures=boolean], [exist=boolean], [floating=boolean],[installWidget=string], [name=string], [pickerMode=[int]], [remove=[boolean]], [title=string], [visible=boolean])

MGPickerService不可撤消, 可以查询且可以编辑

这个命令用来创建及管理用户面板,用户可以安装自己的组件到这个面板上。

 

长名 (短名)

参数类型

属性

-allowedAreas(-aas)

UnsignedInt

createqueryedit

 

面板被允许停靠的所有位置,在创建或编辑模式下需要指定Qt flag Qt::DockWidgetAreas 的整数值。

-allIds(-ai)

 

query


列出所有已创建的面板ID。

-dockArea(-da)

UnsignedInt

createqueryedit


面板的停靠位置。在创建或编辑模式下需要指定Qt flag Qt::DockWidgetArea 的整数值。

-dockFeatures(-df)

UnsignedInt

createqueryedit


面板的停靠特性,在创建或编辑模式下需要指定Qt flag QDockWidget::DockWidgetFeatures的整数值。

-exist(-ex)

 

query


面板是否存在。

-floating(-fl)

boolean

createqueryedit


面板是否浮动还是内置于MG-Picker工作室界面。

-installWidget(-iw)

string

createedit


安装指定ID的用户界面到该面板。查看下面代码例子来获取更多信息。

-name(-n)

string

create


创建面板时使用的初始名字,最终面板的ID将会是这个名字加前缀及可能的数字后缀。如果没有提供名字则默认为"unamed"。无论如何最终的ID都不会重复。

-pickerMode(-pm)

int

createqueryedit


是否在不同的MG-Picker界面模式下显示该面板,0=设计师模式,1=动画师模式, 2=两者.

比如该数值为1,则该面板只在动画师模式显示,切换到设计师则自动隐藏,切回动画师模式又自动显示。

-remove(-rm)

 

edit


移除该用户面板,其安装的用户控件也会被删除。

-title(-t)

string

createqueryedit


用户面板的标题。

-visible(-vis)

boolean

createqueryedit


用户面板的可见性,注意可见性首先取决于pickerMode







 


create 标签可以在创建模式中使用

edit 标签可以在编辑模式中使用

query 标签可以在查询模式中使用

 

MEL例子

// Install a MEL command based widget into MG-Picker and make it an animator mode only widget:
string $dockWgtId = `MGPickerUserPanel -name "test1" -title "Test User Panel" -pickerMode 1`;
string $userWidget = `columnLayout`;
colorSliderGrp -label "Blue" -rgb 0 0 1;
colorSliderGrp -label "Green" -hsv 120 1 1;
MGPickerUserPanel -e -installWidget $userWidget $dockWgtId;
// To remove, use: MGPickerUserPanel -e -remove $dockWgtId;

 

Python例子

# ---------------------------------------------------------------------
# Install a python command based widget into MG-Picker and make it an animator mode only widget:
from maya import cmds
dockWgtId = cmds.MGPickerUserPanel(name="pyCmdUi", title="Python Command UI", pickerMode=1)
userWidget = cmds.columnLayout()
cmds.colorSliderGrp(label="Blue", rgb=(0, 0, 1))
cmds.colorSliderGrp(label="Green", hsv=(120, 1, 1))
cmds.MGPickerUserPanel(dockWgtId, e=True, installWidget=userWidget)
# To remove, use: cmds.MGPickerUserPanel(dockWgtId, e=True, remove=True)

 

# ---------------------------------------------------------------------
# Install a native PySide2/PyQt5 QWidget into MG-Picker and make it an animator mode only widget.
# For PyQt5 it works in a similar way but you use sip instead of shiboken2.
 
from maya import cmds
from maya import OpenMayaUI as omui
from PySide2 import QtWidgets
from shiboken2 import wrapInstance
from mgpicker import mgp

class UserPanelExample(QtWidgets.QWidget):
   def __init__(self, parent=None):
       QtWidgets.QWidget.__init__(self, parent)
       self.dockWgtId = cmds.MGPickerUserPanel(name="nativeQt")
       cmds.MGPickerUserPanel(self.dockWgtId, e=True, title="Native Qt Panel")
       cmds.MGPickerUserPanel(self.dockWgtId, e=True, dockArea=1)
       cmds.MGPickerUserPanel(self.dockWgtId, e=True, pickerMode=2)
       dockWgtPtr = omui.MQtUtil.findControl(self.dockWgtId)
       self.dockWgt = wrapInstance(int(dockWgtPtr), QtWidgets.QDockWidget)
       lay = QtWidgets.QVBoxLayout(self)
       self.currentDocBtn = QtWidgets.QPushButton(self)
       lay.addWidget(self.currentDocBtn)
       self.uiModeBtn = QtWidgets.QPushButton(self)
       lay.addWidget(self.uiModeBtn)
       self.uiLangBtn = QtWidgets.QPushButton(self)
       lay.addWidget(self.uiLangBtn)
 
       # Qt Native Way to install the widget.
       self.dockWgt.setWidget(self)
 
       # Another way to install it, is to set object name and use installWidget flag:
       # objName = "MySpecialName"
       # self.setObjectName(objName)
       # cmds.MGPickerUserPanel(self.dockWgtId, e=True, installWidget=objName)

       # Refresh UI:
       self.updateOnDocChanged()
       self.updateUIModeChanged()
       self.updateOnUILangChanged()

       # Install callbacks so the UI refresh on these MG-Picker events:
       mgp.CallbackManager.registerCallback(mgp.Event.CurrentDocChanged, "test", self.updateOnDocChanged)
       mgp.CallbackManager.registerCallback(mgp.Event.UiModeChanged, "test", self.updateUIModeChanged)
       mgp.CallbackManager.registerCallback(mgp.Event.UiLanguageChanged, "test", self.updateOnUILangChanged)

   def updateOnDocChanged(self):
       view = mgp.MGPicker(q=True, activePickerView=True)
       if not view:
           self.currentDocBtn.setText("N/A")
       else:
           ns = mgp.MGPickerView(view, q=True, namespace=True) or "N/A"
           self.currentDocBtn.setText("NS: {}".format(ns))        

   def updateUIModeChanged(self):
       mode = mgp.MGPicker(q=True, pickerMode=True)
       self.uiModeBtn.setText("Animator Mode" if mode else "Designer Mode")        

   def updateOnUILangChanged(self):
       lang = mgp.MGPicker(q=True, config=("language", ""))
       self.uiLangBtn.setText("Language: {}".format(lang))

wgt = UserPanelExample()

 

 

 

 

 

 

 

Home Previous Next