MGPickerUserPanel命令

MGPickerUserPanel is NOT undoable, queryable, and editable.

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

跳转到: [MEL例子] [Python例子]

MGPickerUserPanel命令

-allowedAreas(-aas)unsignedintC Q E

面板被允许停靠的所有位置,在创建或编辑模式下需要指定Qt标签 [Qt::DockWidgetAreas](https://doc.qt.io/archives/qt-5.6/qt.html的整数值。

-allIds(-ai)Q

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

-dockArea(-da)unsignedintC Q E

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

-dockFeatures(-df)unsignedintC Q E

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

-exist(-ex)Q

面板是否存在。

-floating(-fl)booleanC Q E

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

-installWidget(-iw)stringC E

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

-name(-n)stringC

创建面板时使用的初始名字,最终面板的ID将会是这个名字加前缀及可能的数字后缀。

如果没有提供名字则默认为unamed。无论如何最终的ID都不会重复。

-pickerMode(-pm)unsignedintC Q E

是否在不同的MG-Picker界面模式下显示该面板,

0=设计师模式,1=动画师模式, 2=两者.

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

-remove(-rm)E

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

-title(-t)stringC Q E

用户面板的标题。

-visible(-vis)booleanC Q E

The visibility of user panel. The visibility first get ruled by pickerMode, this flag serves as another layer of visibility.

C 标签可以在创建模式中使用; E 标签可以在编辑模式中使用
Q 标签可以在查询模式中使用   M 标签可以在一条命令中多次使用.

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/6 QWidget into MG-Picker and make it an animator mode only widget.
# For PyQt5/6 it works in a similar way but you use sip instead of shiboken2/6.

from maya import cmds
from maya import OpenMayaUI as omui
from mgpicker import mgp
try:
      from PySide2 import QtWidgets
      from shiboken2 import wrapInstance
except Exception:
      from PySide6 import QtWidgets
      from shiboken6 import wrapInstance


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()