Если я получу экземпляр Python виджета Qt, есть ли способ его экспортировать / реплицировать? - PullRequest
0 голосов
/ 29 марта 2019

Я только что нашел, как интегрировать внутренний интерфейс Maya в Qt, но в их коде есть некоторые проверки, которые затрудняют определение каких-либо виджетов без создания отдельного окна Maya.

Поскольку я могу получить экземпляр Qt виджета после создания этого окна, есть ли что-нибудь, что я смогу прочитать из этого, что позволило бы мне обойти оболочку pm.* для непосредственного создания Qt объект?

Я копался в коде Python Maya, и там нет ссылок на большинство их виджетов, поэтому я думаю, что они все определены в C ++.

Вот краткий пример того, как создать виджет в Maya, а затем переместить его в окно Qt:

from PySide2 import QtWidgets, QtCore, QtGui
from shiboken2 import wrapInstance
import maya.OpenMayaUI as omUI
import pymel.core as pm

class Window(QtWidgets.QWidget):
    def __init__(self):
        # Normal Qt stuff
        parent = wrapInstance(int(omUI.MQtUtil.mainWindow()), QtWidgets.QWidget)
        super(Window, self).__init__(parent)
        self.setWindowFlags(QtCore.Qt.Window)

        # Build a Maya window
        with pm.window():
            with pm.frameLayout(label='Buttons', collapsable=True) as mayaWidget:
                with pm.columnLayout():
                    pm.button()

        # Get the Qt instance of the widget
        widget = pm.uitypes.toQtObject(mayaWidget)

        # Add it to the layout
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(widget)
        self.setLayout(layout)

Window().show()

Каждый отдельный элемент пользовательского интерфейса встроен в QWidget, поэтому нет ничего более очевидного, чем пользовательские классы.

Просто чтобы прояснить, мне интересен процесс, стоящий за этим, и, возможно, способ сделать это с любым виджетом, который определен оберткой, я не смотрю конкретно на frameLayout.

...