如果我获得了Qt小部件的Python实例,是否可以导出/复制它?

时间:2019-03-29 11:48:11

标签: python qt maya

我刚刚发现了如何将Maya的内部UI集成到Qt中,但是他们的代码经过一些检查,因此很难在不创建单独的Maya窗口的情况下定义任何小部件。

由于我可以在创建此窗口后获取窗口小部件的Qt实例,因此我可以从中读取任何内容,从而使我绕过pm.*包装器直接创建Qt对象?

我已经浏览过Maya的python代码,并且没有引用很多它们的小部件,所以我想它们都是用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()

每个UI元素都内置在QWidget中,因此没有什么比自定义类更明显了。

仅需说明一下,我对此过程背后的过程感兴趣,也许对将其包装到包装程序定义的任何小部件都感兴趣,但我并没有特别关注frameLayout

0 个答案:

没有答案