为什么Maya 2009 TreeView控件在拖动时会出现语法错误?

时间:2009-05-04 15:59:26

标签: python treeview syntax-error maya

我在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解释器在尝试将参数提供给命令名时抛出上述错误。

2 个答案:

答案 0 :(得分:1)

请参阅http://download.autodesk.com/us/maya/2009help/CommandsPython/treeView.html:dragAndDropCommand是一个STRING - 你传递一个绑定方法,Maya正在使用它的repr。我不确定,但我怀疑字符串应该命名为顶级(模块级)函数,而不是绑定方法。

答案 1 :(得分:0)

从Maya 2010开始,treeView小部件似乎仍然需要一个mel过程的字符串名称来用于某些回调,但不能用于其他回调。例如,dragCallback和dropCallback按预期工作,但selectCommand和其他人没有。许多其他小部件确实接受python函数用于它们的回调。即使文档将一些treeView回调的参数列为字符串,也没有说明该字符串必须是一个mel过程名称,并且它肯定是不一致的。