gmendieta icon

Maya dock window with pyside2

gmendieta | PRO | 03/07/18 05:28:37 PM UTC | 0 ⭐ | 530 👁️ | Never ⏰ | []
Python |

2.72 KB

|

None

|

0 👍

/

0 👎

"""
File: baseWindow.py
Author: Gorka Mendieta
Implementation of a Base Window using PySide2
"""
import PySide2.QtCore as qc
import PySide2.QtWidgets as qw
import maya.OpenMayaUI as omui
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
from shiboken2 import wrapInstance
 
import maya.cmds as mc
 
 
def GetMayaWindow():
    '''Get Main Maya Window'''
    ptr = omui.MQtUtil.mainWindow()
    return wrapInstance(long(ptr), qw.QWidget)
 
 
class BaseWindow(MayaQWidgetDockableMixin, qw.QMainWindow):
    _windowName = 'BaseUI'
    _windowTitle = 'Base UI'
    _windowSize = (300, 600)
    _minSize = (400, 600)
 
    def __init__(self, parent=GetMayaWindow()):
        """"""
        super(BaseWindow, self).__init__(parent)
 
        self._dockable = False
        self.widgets = {}
        self.BuildUI()
 
    def BuildUI(self):
        '''
 
        :param name:
        :param width:
        :param height:
        :return:
        '''
        self.widgets = {}
 
        if mc.window(self._windowName, exists=True):
            mc.deleteUI(self._windowName)
 
        self.setObjectName(self._windowName)
        self.setWindowTitle(self._windowTitle)
        self.setMinimumSize(self._minSize[0], self._minSize[1])
        self.resize(self._windowSize[0], self._windowSize[1])
 
        self.mainWidget = qw.QWidget()
 
        self.widgets['mainWidget'] = qw.QWidget()
        self.mainLayout = qw.QVBoxLayout()
        self.widgets['mainLayout'] = self.mainLayout
        self.mainWidget.setLayout(self.mainLayout)
        self.setCentralWidget(self.mainWidget)
 
        self.BuildCustomUI()
        self.BuildMenu()
        self.BuildConnections()
 
    def BuildCustomUI(self):
        """
        To be overriden
        :return: None
        """
        print ('BaseWindow.BuildCustomUI')
 
    def BuildMenu(self):
        """
        To be overriden
        :return: None
        """
        print ('BaseWindow.BuildMenu')
        self.windowMenu = self.menuBar().addMenu('Window')
        self.dockableAct = qw.QAction('Dockable Window', self)
        self.dockableAct.setCheckable(True)
        self.dockableAct.triggered.connect(self.UpdateDockable)
        self.windowMenu.addAction(self.dockableAct)
 
    def BuildConnections(self):
        """"""
        print ('BaseWindow.BuildConnections')
 
    def Show(self, dockable=False):
        """"""
        self._dockable = dockable
        self.dockableAct.setChecked(self._dockable)
        self.show(dockable=self._dockable)
 
    def UpdateDockable(self):
        """"""
        self._dockable = self.dockableAct.isChecked()
        self.Show(self._dockable)
        
window = BaseWindow()
window.Show(dockable=True)

Comments