我在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解释器在尝试将参数提供给命令名时抛出上述错误。
答案 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过程名称,并且它肯定是不一致的。