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

1 投票
2 回答
1389 浏览
提问于 2025-04-15 11:24

我在使用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

到2010年的Maya版本,treeView这个控件似乎仍然需要一个字符串形式的mel过程名称来处理它的一些回调,但对其他回调则不需要。例如,拖动回调(dragCallback)和放置回调(dropCallback)可以正常工作,但选择命令(selectCommand)等其他回调就不行。很多其他控件可以接受Python函数作为它们的回调。尽管文档中列出了某些treeView回调的参数是字符串,但并没有说明这个字符串必须是mel过程的名称,而且这种情况确实不太一致。

1

请查看这个链接:http://download.autodesk.com/us/maya/2009help/CommandsPython/treeView.html。这里提到的dragAndDropCommand是一个字符串——你传递的是一个绑定的方法,Maya正在使用它的表示形式。我不太确定,但我怀疑这个字符串应该指的是一个顶层(模块级别)的函数,而不是一个绑定的方法。

撰写回答