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。 这是玛雅人documentation
但我正在寻找一些纯粹的QT小部件或者我们如何实现这一点。我试过QPolygon,但不知道我们如何操纵控制点运行时间。任何想法?
提前致谢。
答案 0 :(得分:1)
因为渐变控件是在maya代码的C ++端编写的,所以没有像你可能已经发现的那样将它作为PyQt4小部件的公共接口(据我所知)。
什么是sip会给你一个QWidget参考,让你重新显示并根据需要将它放在你的应用程序中。但至于从那里开始使用它,最好的办法就是连接到python commands callbacks for the gradient control
cmds.gradientControlNoAttr(self.range_ctr, e=True, changeCommand=self.myCallback)
如果gradientControlNoAttr
的可用回调对你来说还不够,那么我恐怕你将不得不使用自己的绘画事件(或使用QGraphics类)推出自己的自定义小部件。