I don't really have an answer for you on this one. I tried to shuffle
behaviour did not change. Don't forget, this is all a hack on the Maya UI
Post by Timothy KimRunning the code below adds the splitter. Do you know if there's a work around for this?
Thanks
from PySide2 import QtCore, QtWidgets
import shiboken2
import maya.cmds as cmds
import maya.OpenMayaUI as mui
super(MyDialog, self).__init__(parent, **kwargs)
self.setObjectName("MyWindow")
self.resize(800, 600)
self.setWindowTitle("PyQt ModelPanel Test")
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
#self.verticalLayout = QtWidgets.QVBoxLayout(self)
self.verticalLayout = QtWidgets.QVBoxLayout(self.central_widget)
self.verticalLayout.setContentsMargins(0,0,0,0)
# need to set a name so it can be referenced by maya node path
self.verticalLayout.setObjectName("mainLayout")
# First use SIP to unwrap the layout into a pointer
# Then get the full path to the UI in maya as a string
layout =
mui.MQtUtil.fullName(long(shiboken2.getCppPointer(self.verticalLayout)[0]))
cmds.setParent(layout)
paneLayoutName = cmds.paneLayout()
# Find a pointer to the paneLayout that we just created
ptr = mui.MQtUtil.findControl(paneLayoutName)
# Wrap the pointer into a python QObject
self.paneLayout = shiboken2.wrapInstance(long(ptr),
QtWidgets.QWidget)
self.cameraName = cmds.camera()[0]
self.modelPanelName = cmds.modelPanel("customModelPanel#",
label="ModelPanel Test", cam=self.cameraName)
timeline = cmds.timePort('cameraViewerTimePort')
time_ptr = mui.MQtUtil.findControl(timeline)
self.timePaneLayout = shiboken2.wrapInstance(long(time_ptr), QtWidgets.QWidget)
# Find a pointer to the modelPanel that we just created
ptr = mui.MQtUtil.findControl(self.modelPanelName)
# Wrap the pointer into a python QObject
self.modelPanel = shiboken2.wrapInstance(long(ptr),
QtWidgets.QWidget)
splitter1 = QtWidgets.QSplitter(QtCore.Qt.Vertical)
splitter1.addWidget(self.paneLayout)
splitter1.addWidget(self.timePaneLayout)
splitter1.setSizes([500, 200])
# add our QObject reference to the paneLayout to our layout
#self.verticalLayout.addWidget(self.paneLayout)
self.verticalLayout.addWidget(splitter1)
super(MyDialog, self).showEvent(event)
# maya can lag in how it repaints UI. Force it to repaint
# when we show the window.
self.modelPanel.repaint()
# get a pointer to the maya main window
ptr = mui.MQtUtil.mainWindow()
# use sip to wrap the pointer into a QObject
win = shiboken2.wrapInstance(long(ptr), QtWidgets.QWidget)
d = MyDialog(win)
d.show()
return d
dialog.deleteLater()
pass
dialog = show()
------------------------------
*From:* Timothy Kim
*Sent:* Thursday, August 23, 2018 12:35:46 PM
*Subject:* Re: [Maya-Python] Re: How to embed modelPanel to a pyqt ui
(again) ?
Hey Justin,
It seems like putting the paneLayout into a QSplitter causes the issue. I
edited your code to add the splitter.
------------------------------
*Sent:* Monday, August 20, 2018 9:44:08 AM
*Subject:* [MailingList] Re: [Maya-Python] Re: How to embed modelPanel to
a pyqt ui (again) ?
Thank Justin. I don't have access to my code right now to check the
differences between mine and this one but this code works perfectly fine.
Thanks again.
------------------------------
*Sent:* Sunday, August 19, 2018 9:37:26 PM
*Subject:* Re: [Maya-Python] Re: How to embed modelPanel to a pyqt ui
(again) ?
** Incoming mail from outside The Mill **
Hello, Thanks for the examples but I noticed that none of the icons in
modelEditorIconBar seem to work. Clicking on shaded or wireframe icons have
no effect in the viewport. Does anyone know how to fix this problem? I am
referring to example1.
Thanks
http://justinfx.com/2011/11/20/mixing-pyqt4-widgets-and-maya-ui-objects/
I tested it in Maya 2018 and it seems like the toolbar icons in the model
editor worked just fine. Can you confirm?
i know this has been asked
<https://groups.google.com/forum/#!topic/python_inside_maya/wioChE9IFDA>
on 2011 and Justine has an awesome example here
<https://gist.github.com/justinfx/1381489>
you saw the last few lines i commented out the setObjectName xxxx and
yyyyy, without them, when you run the code in maya, it successfully opens
the ui, but when you press 4 or 5 on the modelPanel, you will see the
updateModelPanelBar
MayaWindow|||formLayout1|viewPanes|modelPanel4|modelPanel5|modelPanel5;
notice the ||| part.
it seems as if without object names set, maya doesn't know how to find the
newly created modelPanel. also if i'm using mainwindow i also see this
error unless i set object names using an awkward workaround.
example1
from PyQt4 import QtCore,QtGui
import maya.cmds as cmds
import maya.OpenMayaUI as OpenMayaUI
import sip
windowPointer = OpenMayaUI.MQtUtil.mainWindow()
return sip.wrapinstance(long(windowPointer), QtCore.QObject)
super(MayaView,self).__init__(parent,**kwargs)
self.setObjectName('MyWindow')
self.setWindowTitle('3dView')
self.verticalLayout = QtGui.QVBoxLayout(self)
self.verticalLayout.setContentsMargins(0,0,0,0)
self.verticalLayout.setObjectName("mainLayout")
applyBut = QtGui.QPushButton('Apply')
closeBut = QtGui.QPushButton('Close')
butLayout = QtGui.QHBoxLayout()
butLayout.addWidget(applyBut)
butLayout.addWidget(closeBut)
butLayout.setObjectName("xxxBut")
layout = OpenMayaUI.MQtUtil.fullName(long(sip.unwrapinstance(self.
verticalLayout)))
print "vertical layout",layout
cmds.setParent(layout)
paneLayoutName = cmds.paneLayout()
# find a pointer to the paneLayout that we just created
ptr = OpenMayaUI.MQtUtil.findControl(paneLayoutName)
# warp the pointer into a python QObject
self.paneLayout = sip.wrapinstance(long(ptr),QtCore.QObject)
# new create a camera
self.cameraName = cmds.camera(n='PickerView_camera')[0]
cmds.hide(self.cameraName)
cmds.viewFit(self.cameraName,all=True)
self.modelPanelName = cmds.modelPanel(cam=self.cameraName,parent=
paneLayoutName)
# edit model panel
modelEditorValue = cmds.modelPanel(self.modelPanelName,q=True,me=
True)
cmds.modelEditor(modelEditorValue,e=True,da='smoothShaded',ca=
False,grid=False,hud=False,\
manipulators=False,displayTextures=True,ha=False,
j=False,ikh=False,df=False,\
dim=False,lc=False,nc=True,wos=False,dl='default'
,av=False)
# find a pointer to the modelPanel that we just created
ptr = OpenMayaUI.MQtUtil.findControl(self.modelPanelName)
#wrap the pointer into a python QObject
self.modelPanel = sip.wrapinstance(long(ptr),QtCore.QObject)
#add our QObject reference to the paneLayout to our layout
self.verticalLayout.addWidget(self.paneLayout)
self.verticalLayout.addLayout(butLayout)
self.verticalLayout.setSpacing(0)
self.setLayout(self.verticalLayout)
self.setFixedSize(400,600)
super(MainWin,self).__init__(parent)
cam = MayaView()
# self.setObjectName('xxxxxx')
but = QtGui.QPushButton('zzz')
layout = QtGui.QVBoxLayout()
layout.addWidget(but)
layout.addWidget(cam)
self.setLayout(layout)
# layout.setObjectName('yyyyy')
a = MainWin()
a.show()
from PyQt4 import QtCore,QtGui
import maya.cmds as cmds
import maya.OpenMayaUI as OpenMayaUI
import sip
windowPointer = OpenMayaUI.MQtUtil.mainWindow()
return sip.wrapinstance(long(windowPointer), QtCore.QObject)
super(MayaView,self).__init__(parent,**kwargs)
self.setObjectName('MyWindow')
self.setWindowTitle('3dView')
self.verticalLayout = QtGui.QVBoxLayout(self)
self.verticalLayout.setContentsMargins(0,0,0,0)
self.verticalLayout.setObjectName("mainLayout")
applyBut = QtGui.QPushButton('Apply')
closeBut = QtGui.QPushButton('Close')
butLayout = QtGui.QHBoxLayout()
butLayout.addWidget(applyBut)
butLayout.addWidget(closeBut)
layout = OpenMayaUI.MQtUtil.fullName(long(sip.unwrapinstance(self.
verticalLayout)))
cmds.setParent(layout)
paneLayoutName = cmds.paneLayout()
# find a pointer to the paneLayout that we just created
ptr = OpenMayaUI.MQtUtil.findControl(paneLayoutName)
# warp the pointer into a python QObject
self.paneLayout = sip.wrapinstance(long(ptr),QtCore.QObject)
# new create a camera
self.cameraName = cmds.camera(n='PickerView_camera')[0]
cmds.hide(self.cameraName)
cmds.viewFit(self.cameraName,all=True)
self.modelPanelName = cmds.modelPanel(cam=self.cameraName)
cmds.panel(self.modelPanelName,e=True,mbv=False)
flayout = cmds.modelPanel(self.modelPanelName,q=True,barLayout=
True)
cmds.frameLayout(flayout,e=True,collapse=True)
# edit model panel
modelEditorValue = cmds.modelPanel(self.modelPanelName,q=True,me=
True)
cmds.modelEditor(modelEditorValue,e=True,da='smoothShaded',ca=
False,grid=False,hud=False,\
manipulators=False,displayTextures=True,ha=False,
j=False,ikh=False,df=False,\
dim=False,lc=False,nc=True,wos=False,dl='default'
,av=False)
# find a pointer to the modelPanel that we just created
ptr = OpenMayaUI.MQtUtil.findControl(self.modelPanelName)
#wrap the pointer into a python QObject
self.modelPanel = sip.wrapinstance(long(ptr),QtCore.QObject)
#add our QObject reference to the paneLayout to our layout
self.verticalLayout.addWidget(self.paneLayout)
self.verticalLayout.addLayout(butLayout)
self.verticalLayout.setSpacing(0)
self.setLayout(self.verticalLayout)
self.setFixedSize(400,600)
super(MainWin,self).__init__(parent)
self.setObjectName('QtMainWindow')
self.mid = QtGui.QMdiArea()
self.mid.setObjectName('QMdiArea')
self.setCentralWidget(self.mid)
cam = MayaView()
self.mid.addSubWindow(cam)
a = MainWin()
a.show()
--
You received this message because you are subscribed to the Google Groups
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an
To view this discussion on the web visit
https://groups.google.com/d/msgid/python_inside_maya/dfa30f8a-617b-4e4b-8aac-f373054739db%40googlegroups.com
<https://groups.google.com/d/msgid/python_inside_maya/dfa30f8a-617b-4e4b-8aac-f373054739db%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an
To view this discussion on the web visit
https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA16iJOC3rq-OviFM2zX6TzwUUmQWz184f-VEHnoBwZ9PA%40mail.gmail.com
<https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA16iJOC3rq-OviFM2zX6TzwUUmQWz184f-VEHnoBwZ9PA%40mail.gmail.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an
To view this discussion on the web visit
https://groups.google.com/d/msgid/python_inside_maya/BL0PR02MB363517A5490B81A69CEC8B85D3320%40BL0PR02MB3635.namprd02.prod.outlook.com
<https://groups.google.com/d/msgid/python_inside_maya/BL0PR02MB363517A5490B81A69CEC8B85D3320%40BL0PR02MB3635.namprd02.prod.outlook.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an
To view this discussion on the web visit
https://groups.google.com/d/msgid/python_inside_maya/DM5PR02MB36377ECD33C4A72D151B822DD3370%40DM5PR02MB3637.namprd02.prod.outlook.com
<https://groups.google.com/d/msgid/python_inside_maya/DM5PR02MB36377ECD33C4A72D151B822DD3370%40DM5PR02MB3637.namprd02.prod.outlook.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.