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