docking a Pyside widget.

46 views
Skip to first unread message

Panupat Chongstitwattana

unread,
Aug 14, 2018, 4:18:50 AM8/14/18
to Python Programming for Autodesk Maya
I can drag the widget to get it docking, but  I cannot dock it with dockControl. It would say Object's window not found. Can anyone help me please? What should I add to make the command work?

from shiboken import wrapInstance
from PySide import QtGui, QtCore
from maya import OpenMayaUI as OpenMayaUI
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
from maya.OpenMayaUI import MQtUtil

class MyWindow(MayaQWidgetDockableMixin, QtGui.QDialog):
    toolName
= 'myToolWidget'

   
def __init__(self, parent = None):
       
self.deleteInstances()

       
super(self.__class__, self).__init__(parent = parent)
        mayaMainWindowPtr
= OpenMayaUI.MQtUtil.mainWindow()
       
self.mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QtGui.QMainWindow)
       
self.setObjectName(self.__class__.toolName)

       
self.setWindowFlags(QtCore.Qt.Window)
       
self.setWindowTitle('My tool')
       
self.resize(200, 200)

       
self.myButton = QtGui.QPushButton('My awesome button!!')
       
self.mainLayout = QtGui.QVBoxLayout()
       
self.mainLayout.addWidget(self.myButton)
       
self.setLayout(self.mainLayout)

   
def dockCloseEventTriggered(self):
       
self.deleteInstances()

   
def deleteInstances(self):
        mayaMainWindowPtr
= OpenMayaUI.MQtUtil.mainWindow()
        mayaMainWindow
= wrapInstance(long(mayaMainWindowPtr), QtGui.QMainWindow)
       
       
for obj in mayaMainWindow.children():
           
if type( obj ) == maya.app.general.mayaMixin.MayaQDockWidget:
               
if obj.widget().objectName() == self.__class__.toolName:
                   
print 'Deleting instance {0}'.format(obj)
                    mayaMainWindow
.removeDockWidget(obj)
                    obj
.setParent(None)
                    obj
.deleteLater()        

   
def run(self):
       
self.show(dockable = True)

myWin
= MyWindow()
myWin
.run()

allowedAreas
=['right']
cmds
.dockControl( area='right', content=myWin.objectName(), allowedArea=allowedAreas)

# Error: RuntimeError: file <maya console> line 1: Object's window not found. #


Reply all
Reply to author
Forward
0 new messages