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是一个字符串——您正在传递一个绑定方法,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 回答