Maya dockable widget
see Dock.py
also see maya-dockable_window.py
use like this
dock.py
from maya import cmds, OpenMayaUI as omui
from PySide2 import QtWidgets, QtCore
from shiboken2 import wrapInstance
def Dock(Widget, width=300, show=True):
"""Dock `Widget` into [[Autodesk Maya|Maya]]
Arguments:
Widget (QWidget): Class
show (bool, optional): Whether to show the resulting dock once created
"""
name = Widget.__name__
label = getattr(Widget, "label", name)
try:
cmds.deleteUI(name)
except RuntimeError:
pass
dockControl = cmds.workspaceControl(
name,
tabToControl=["AttributeEditor", -1],
initialWidth=width,
minimumWidth=True,
widthProperty="preferred",
label=label
)
dockPtr = omui.MQtUtil.findControl(dockControl)
print(dockPtr, type(dockPtr))
dockWidget = wrapInstance(int(dockPtr), QtWidgets.QWidget)
dockWidget.setAttribute(QtCore.Qt.WA_DeleteOnClose)
child = Widget(dockWidget)
dockWidget.layout().addWidget(child)
if show:
cmds.evalDeferred(
lambda *args: cmds.workspaceControl(
dockControl,
edit=True,
restore=True
)
)
return child
Backlinks¶
- Maya qt window
- you might want to make your window dockable in Maya: Maya dockable widget