Skip to content

Instantly share code, notes, and snippets.

@danbradham
Last active January 30, 2024 08:43
Show Gist options
  • Save danbradham/a4541381a5fe5963a6587a1a45217bdb to your computer and use it in GitHub Desktop.
Save danbradham/a4541381a5fe5963a6587a1a45217bdb to your computer and use it in GitHub Desktop.
Maya Dockable Mixin Example
from PySide2 import QtWidgets, QtCore
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
from maya import OpenMayaUI
# Compatability
try:
long
except NameError:
long = int
class Mix(MayaQWidgetDockableMixin, QtWidgets.QMainWindow):
_instance = None
def __init__(self, *args, **kwargs):
super(Mix, self).__init__(*args, **kwargs)
self.setWindowTitle("Test")
self.setMinimumSize(600, 600)
self.resize(600, 800)
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
self.layout = QtWidgets.QVBoxLayout(self.central_widget)
self.table_widget = QtWidgets.QTableWidget()
self.table_widget.setColumnCount(1)
self.table_widget.setAlternatingRowColors(True)
self.table_widget.setSelectionBehavior(
QtWidgets.QAbstractItemView.SelectRows)
self.table_widget.setSelectionMode(
QtWidgets.QAbstractItemView.SingleSelection)
self.table_widget.setShowGrid(False)
self.table_widget.setGridStyle(QtCore.Qt.NoPen)
self.table_widget.verticalHeader().setVisible(False)
self.table_widget.horizontalHeader().setVisible(False)
self.table_widget.horizontalHeader().setStretchLastSection(True)
for i in range(10):
self.table_widget.insertRow(i)
item = QtWidgets.QTableWidgetItem()
item.setText("test{0}".format(i))
self.table_widget.setItem(i, 0, item)
self.btn = QtWidgets.QPushButton("TEST")
self.layout.addWidget(self.table_widget)
self.layout.addWidget(self.btn)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
def restore():
'''Called when Maya opens to restore the Shadeset UI.'''
workspace_control = OpenMayaUI.MQtUtil.getCurrentParent()
Mix._instance = Mix()
pointer = OpenMayaUI.MQtUtil.findControl(Mix._instance.objectName())
OpenMayaUI.MQtUtil.addWidgetToMayaLayout(
long(pointer),
long(workspace_control),
)
def show(**kwargs):
'''Show the Shadeset UI.'''
if Mix._instance is None:
Mix._instance = Mix()
Mix._instance.show(
dockable=True,
area='right',
uiScript='import mix_ui; mix_ui.restore()',
)
if __name__ == '__main__':
show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment