Добавьте Maya UV Editor и UV Toolkit в мой пользовательский интерфейс PySide2 - PullRequest
0 голосов
/ 04 марта 2020

Я создаю 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()
...