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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么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解释器在尝试将参数提供给命令名时抛出上述错误。

答案

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

另一答案

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

以上是关于为什么Maya 2009 TreeView控件在拖动时会出现语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

使控件在拖放期间对拖动事件透明

为啥 TreeView 控件会折叠所有子节点?

VB treeview 中各控件的属性

DELPHI TreeView控件问题

拖放后在Treeview中获取子项的名称

winForm树形菜单,除了用TreeView还有其他的控件吗?