1

Maya 2009 で TreeView コントロールを使用していますが、ドラッグ アンド ドロップで構文エラーが発生します。私のコードは次のとおりです(簡潔にするために簡略化しています):

class View(event.Dispatcher):
    def __init__(self):
        self.window = cmds.window()
        tree_view = cmds.treeView(
            numberOfButtons=1,
            allowReparenting=True,
            dragAndDropCommand=self.tree_view_onDrag
        )
        cmds.showWindow(self.window)

    def tree_view_onDrag(self, dropped_items, old_parents, old_indexes, new_parent, new_indexes, item_before, item_after, *args):
        print "worked"

要素をドラッグ アンド ドロップすると、次のコマンドがコンソールで実行されます。

<bound method View.tree_view_onDrag of  {"layer 3"} {""} {1} "layer 1"  {0} "" "layer 2";

次のエラーが表示されます。

// Error: <bound method View.tree_view_onDrag of  {"layer 3"} {""} {1} "layer 1"  {0}€ // 
// Error: Line 1.1: Syntax error // 

編集:私が抱えていた問題は、treeView がまだほとんどのイベント コールバックで MEL 関数呼び出しを実装しているためであることがわかりました。上記のエラーは、コマンド名に引数を与えようとする MEL インタープリタによってスローされています。

4

2 に答える 2

1

http://download.autodesk.com/us/maya/2009help/CommandsPython/treeView.htmlを参照してください。 dragAndDropCommand は STRING です。バインドされたメソッドを渡しているため、Maya はその repr を使用しています。よくわかりませんが、文字列はバインドされたメソッドではなく、トップレベル (モジュールレベル) の関数を指定する必要があると思います。

于 2009-05-04T20:21:38.933 に答える
0

Maya 2010 の時点で、treeView ウィジェットは、一部のコールバックに使用するために mel プロシージャの文字列名をまだ必要としているように見えますが、他のコールバックには必要ありません。たとえば、dragCallback と dropCallback は期待どおりに機能しますが、selectCommand などは機能しません。他の多くのウィジェットは、コールバックに Python 関数を受け入れます。ドキュメントには、一部の treeView コールバックの引数が文字列としてリストされていますが、文字列が mel プロシージャ名である必要があるとは記載されておらず、確かに一貫性がありません。

于 2009-11-09T22:57:03.897 に答える