pyqt中有没有曲线控件?我已经附上了一个基于maya gradientControl的图片。我正在寻找一些类似于pyqt的东西,我想要编辑曲线,每次编辑都应该触发一些signal.Right,现在我可以使用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。这是maya的documentation
但我正在寻找一些纯粹的QT小工具或一些想法,我们可以实现这一点。我尝试过使用QPolygon,但不知道如何操作控制点运行时。有什么想法吗?
提前谢谢。
发布于 2012-06-27 13:56:44
因为渐变控件是用maya代码的C++端编写的,所以您可能已经发现(据我所知)它并没有作为PyQt4小部件的公共接口。
sip给你的是一个QWidget引用,它可以让你根据自己的喜好重新定位并将其放入你的应用中。但是从那时起使用它,最好的办法就是连接到python commands callbacks for the gradient control
cmds.gradientControlNoAttr(self.range_ctr, e=True, changeCommand=self.myCallback)如果gradientControlNoAttr的可用回调对您来说还不够,那么我担心您将不得不使用自己的paint事件(或使用QGraphics类)来滚动您自己的自定义小部件。
https://stackoverflow.com/questions/11219920
复制相似问题