0

I create a QMainWindow and use findControl and wrapInstance to add polyTexturePlacementPanel1 as centralWidget and UVToolkitDockControl as QDocWidget. My UI is based on the dockableWorkspaceWidget.py from maya devkit, that use "MayaQWidgetDockableMixin".

Now, the problem is first time that i run the UI, everything is fine and perfect, but if i close the window and run again, the uv editor section is black and if detach the toolkit and attach again, it's jump somewhere else and go under maya main ui and show this error: " // Warning: The VP 2.0 renderer failed to render. Switching to default rendering mode " screenshots of the problem:

first run is ok

close and run again

detach UV Toolkit and Attach again

Here is my Code:

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()
Amin YSH
  • 1
  • 2

0 Answers0