Python PyQt曲线控制

Python PyQt曲线控制,python,pyqt,qwidget,maya,Python,Pyqt,Qwidget,Maya,pyqt中是否有任何曲线控件?我附加了一个基于maya gradientControl的图像。我正在寻找一些类似于pyqt的东西,我想编辑曲线,每次编辑都会触发一些信号。现在我可以使用sip,我可以将maya gradientControl包装到我的pyqt窗口中,但它确实没有按预期工作。这是我正在尝试的代码。这只是一个QWidget,所以当我在曲线上添加一个点时,很难发现发生了什么 import os import maya.cmds as cmds import maya.mel as me

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包含一个主窗口和一个QFrame,其中包含。 这是玛雅人

但是我正在寻找一些纯粹的QT小部件或者一些我们如何实现它的想法。我尝试使用QPolygon,但不知道如何操纵控制点运行时。有什么想法吗


提前感谢。

< P>因为梯度控制是在Maya代码C++的边上写的,没有公共接口作为PYQT4小部件,正如你可能已经发现的(据我所知)。 sip将为您提供一个QWidget参考,让您可以根据需要重新发布并将其放置在应用程序中。但对于从那以后使用它,你最好的办法就是直接连接到


如果对于<代码>渐变控件NOTAFT/<代码>的可用回调是不够的,那么恐怕您必须使用自己的绘画事件(或使用QGoice类)来滚动自己的自定义小部件。

< P>,因为梯度控件是在Maya代码的C++侧编写的,您可能已经发现(据我所知),它没有作为PyQt4小部件的公共接口

sip将为您提供一个QWidget参考,让您可以根据需要重新发布并将其放置在应用程序中。但对于从那以后使用它,你最好的办法就是直接连接到


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

回调对我来说不起作用。我正在考虑自己写一个小部件,但不确定从哪里开始。我认为回调会起作用,但对小部件的控制是有限的。问题是,如果我想查询小部件的总变化,比如像这样添加了多少个点,这是非常困难的。看起来并不太困难。您可以使用optionVar获取曲线的完整字符串表示,也可以使用回调跟踪更改。在大多数情况下,它就像一个具有更糟糕属性接口的小部件。除了灵活性和速度之外,sip wrap是不错的。好吧,你需要sip wrapped QWidget,无论什么,都可以将其放入你自己的布局并重新发布。但是sip对象在这之外并没有多大用处。回调对我来说不太管用。我正在考虑自己写一个小部件,但不确定从哪里开始。我认为回调会起作用,但对小部件的控制是有限的。问题是,如果我想查询小部件的总变化,比如像这样添加了多少个点,这是非常困难的。看起来并不太困难。您可以使用optionVar获取曲线的完整字符串表示,也可以使用回调跟踪更改。在大多数情况下,它就像一个具有更糟糕属性接口的小部件。除了灵活性和速度之外,sip wrap是不错的。好吧,你需要sip wrapped QWidget,无论什么,都可以将其放入你自己的布局并重新发布。但sip对象的用途远不止于此。我认为现在添加回调将是一个解决方案,但如果有人知道任何类似于此的小部件,那就好了。我认为现在添加回调将是一个解决方案,但如果有人知道任何类似于此的小部件,那就好了。
cmds.gradientControlNoAttr(self.range_ctr, e=True, changeCommand=self.myCallback)