为什么Maya 2009的TreeView控件在拖动时会报语法错误?
我在使用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正在使用它的表示形式。我不太确定,但我怀疑这个字符串应该指的是一个顶层(模块级别)的函数,而不是一个绑定的方法。