Я создаю QMainWindow и использую findControl и wrapInstance для добавления polyTexturePlacementPanel1 в качестве centralWidget и UVToolkitDockControl в качестве QDocWidget. Мой пользовательский интерфейс основан на dockableWorkspaceWidget.py от Maya Devkit, который использует " MayaQWidgetDockableMixin ".
Теперь проблема заключается в том, что я впервые запускаю пользовательский интерфейс, все отлично и идеально, но если я закрою окно и снова запустлю, секция uv editor черная, а если отсоединить инструментарий и снова присоединить, она переместится куда-нибудь еще и go под Maya Main UI и покажет эту ошибку: " // Предупреждение. Рендереру VP 2.0 не удалось выполнить рендеринг. Переключение в режим рендеринга по умолчанию"Снимки экрана:
Первый запуск в порядке
закройте и запустите снова
отсоедините UV Toolkit и снова присоедините
Вот мой код :
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt
from shiboken2 import wrapInstance
from maya.OpenMayaUI import MQtUtil, MQtUtil_mainWindow
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
import maya.cmds as mc
###-----------------------------------###
width=800
height=500
if not 'UVEditor_MixinWindow' in globals():
UVEditor_MixinWindow = None
maya_ptr = wrapInstance(long(MQtUtil_mainWindow()), QMainWindow)
if not 'getUvEd' in globals():
mc.TextureViewWindow()
getUvEd = maya_ptr.findChildren(QWidget, "polyTexturePlacementPanel1")[0]
getUvTk = maya_ptr.findChildren(QWidget, "UVToolkitDockControl")[0]
getOrgUvEdParent = getUvEd.parent().parent().parent().parent().parent()
getOrgUvTkParent = getUvTk.parent().parent().parent().parent()
###-----------------------------------###
class UVEditor_UI(MayaQWidgetDockableMixin, QMainWindow):
CONTROL_NAME = 'UVEditor'
WSC_NAME = CONTROL_NAME + "WorkspaceControl"
WINDOW_TITLE = 'UV Editor'
def __init__(self, parent=None):
super(UVEditor_UI, self).__init__(parent=parent)
self.setObjectName(self.CONTROL_NAME)
self.setWindowTitle(self.WINDOW_TITLE)
# here we can start coding our UI
self.main_wd = QWidget()
self.main_lay = QVBoxLayout()
self.main_lay.setContentsMargins(2, 2, 2, 2)
self.main_wd.setLayout(self.main_lay)
self.main_lay.addWidget(getUvEd)
self.dockWidget = QDockWidget('UV Toolkit', self)
self.dockWidget.setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea)
self.dockWidget.setFloating(False)
self.dockWidget.setWidget(getUvTk)
self.setCentralWidget(self.main_wd)
self.addDockWidget(Qt.RightDockWidgetArea, self.dockWidget)
self.resize(width, height)
if getOrgUvEdParent:
getOrgUvEdParent.setParent(None)
getOrgUvEdParent.deleteLater()
getOrgUvTkParent.setParent(None)
getOrgUvTkParent.deleteLater()
def UVEditor_UIScript(restore=False):
global UVEditor_MixinWindow
if UVEditor_MixinWindow is None:
UVEditor_MixinWindow = UVEditor_UI()
UVEditor_MixinWindow.setObjectName(UVEditor_MixinWindow.CONTROL_NAME)
if restore == True:
restoredControl = MQtUtil.getCurrentParent()
mixinPtr = MQtUtil.findControl(UVEditor_MixinWindow.objectName())
MQtUtil.addWidgetToMayaLayout(long(mixinPtr), long(restoredControl))
else:
UVEditor_MixinWindow.show(dockable=True, height=height, width=width, uiScript='UVEditor_UIScript(restore=True)')
return UVEditor_MixinWindow
# this is where we call the window
def run():
ui = UVEditor_UIScript()
return ui
run()