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 に答える