"""
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