PyMaxExplorer/explorer.py
2 UI platform which demostrate the PySide2 ui loading and
3 display object tree on explorer.
7 from PySide2
import QtCore, QtWidgets
10 sys.path.append(os.path.dirname(os.path.abspath(__file__)))
11 from maxDataModels
import mxTreeNode
12 from qtViewModels
import vmodelMaxObjects
15 uitype, basetype = MaxPlus.LoadUiType(os.path.join(os.path.dirname(__file__),
'mainUI.ui'))
17 class PyMaxExplorer(basetype,uitype):
18 def __init__(self, parent=None):
19 super(PyMaxExplorer,self).__init__(parent)
23 self.setupMaxCallbacks()
25 def setupMaxCallbacks(self):
26 self._callbackItem = rt.NodeEventCallback(all=self.cbNodeEvent)
28 def teardownMaxCallbacks(self):
29 self._callbackItem =
None
31 def buildViewModel(self):
32 self._rootNode = self.buildTree(rt.rootNode)
33 self._proxyModel = QtCore.QSortFilterProxyModel()
34 self._model = vmodelMaxObjects(self._rootNode)
35 self._proxyModel.setSourceModel(self._model)
36 self._proxyModel.setDynamicSortFilter(
True)
37 self._proxyModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
38 self.treeView_objects.setModel(self._proxyModel)
39 self.treeView_objects.setSortingEnabled(
True)
40 QtCore.QObject.connect(self.uiGraphFilter, QtCore.SIGNAL(
"textChanged(QString)"), self._proxyModel.setFilterRegExp)
42 def connectActions(self):
43 self.connect(self.actionWatch, QtCore.SIGNAL(
'triggered()'),self.actWatch)
44 self.connect(self.actionAbout, QtCore.SIGNAL(
'triggered()'),self.actAbout)
45 self.connect(self.actionRefresh, QtCore.SIGNAL(
'triggered()'),self.actRefresh)
46 self.connect(self.actionExit, QtCore.SIGNAL(
'triggered()'),self.actExit)
47 self.connect(self.actionUndo, QtCore.SIGNAL(
'triggered()'),self.actUndo)
48 self.connect(self.actionRedo, QtCore.SIGNAL(
'triggered()'),self.actRedo)
54 QtWidgets.QMessageBox.about(self,
"PyMaxExplorer 1.0",
"PyMaxExplorer is a demo for pymxs and PySide usage on 3ds Max")
68 def cbNodeEvent(self, event, node):
71 def buildTree(self, mxObj, parent = None, userName = ''):
75 newNode = mxTreeNode(nodeName, parent)
76 for c
in mxObj.children:
77 self.buildTree(c, newNode)