1

pyqt 中是否有任何曲线控制?我附上了一张基于 maya gradientControl 的图像。我正在寻找与 pyqt 类似的东西,我想在其中编辑曲线,并且每次编辑都应该触发一些信号。现在我可以使用 sip 并且可以将 maya gradientControl 包装到我的 pyqt 窗口中,但它确实没有按预期工作。这是我正在尝试的代码。它只是一个 QWidget 所以当我在曲线上添加一个点时很难找到发生了什么。

import os
import maya.cmds as cmds
import maya.mel as mel
import maya.OpenMayaUI as mui
import sys
import sip
from PyQt4 import QtGui, QtCore, uic
baseUI = os.path.join(os.path.dirname(__file__), "range_ctrl.ui")
baseUIClass, baseUIWidget = uic.loadUiType(baseUI)

def getMayaWindow():
    windowPointer = mui.MQtUtil.mainWindow()
    return sip.wrapinstance(long(windowPointer), QtCore.QObject)

def convertToQT(controlName):
    controlPoniter = mui.MQtUtil.findControl(controlName)
    if controlPoniter is not None:
        return sip.wrapinstance(long(controlPoniter), QtCore.QObject)

class MayaRangeCtrl(baseUIWidget, baseUIClass):
    def __init__(self, parent=getMayaWindow()):
        super(baseUIWidget, self).__init__(parent)
        self.setupUi(self)
        self.setObjectName("mayaRangeCtrl")
        self.setWindowTitle("Range Control")
        self.p1_vbox = QtGui.QVBoxLayout(self.frame)
        self.range_ctr = cmds.gradientControlNoAttr( 'mayaaaa', h=90)
        mayaQTObj = convertToQT(self.range_ctr)
        self.p1_vbox.addWidget(mayaQTObj)
        self.setCentralWidget(self.frame)
        self.show()

def main():
    myWindow = MayaRangeCtrl()

def run():
    main()

这是屏幕截图。

在此处输入图像描述

并且 ui 包含一个 mian 窗口和一个 QFrame。这是玛雅文档

但我正在寻找一些纯 QT 小部件或一些想法,我们可以如何实现它。我尝试使用 QPolygon,但不知道如何操作控制点运行时间。任何的想法 ?

提前致谢。

4

1 回答 1

1

因为渐变控件是在 Maya 代码的 C++ 端编写的,所以没有像您可能已经发现的那样(据我所知)作为 PyQt4 小部件的公共接口。

sip 将给你的是一个 QWidget 参考,它可以让你根据需要重新设置它并将其放置在你的应用程序中。但至于从那里开始使用它,你最好的办法是连接到梯度控制的python命令回调

cmds.gradientControlNoAttr(self.range_ctr, e=True, changeCommand=self.myCallback)

如果可用的回调对gradientControlNoAttr您来说还不够,那么恐怕您将不得不使用您自己的绘制事件(或使用 QGraphics 类)来滚动您自己的自定义小部件。

于 2012-06-27T05:56:43.547 回答