Pregunta

Estoy usando el control TreeView en Maya 2009 pero obtengo un error de sintaxis al arrastrar y soltar. Mi código es el siguiente (simplificado por brevedad):

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"

Al arrastrar y soltar, el elemento que se ejecuta se ejecuta en la consola:

<bound method View.tree_view_onDrag of  {"layer 3"} {""} {1} "layer 1"  {0} "" "layer 2";

Y recibe el siguiente error:

// Error: <bound method View.tree_view_onDrag of  {"layer 3"} {""} {1} "layer 1"  {0}€ // 
// Error: Line 1.1: Syntax error // 

EDITAR: Resulta que los problemas que tenía se debían a que treeView aún implementaba llamadas a la función MEL en la mayoría de las devoluciones de llamada de eventos. El intérprete de MEL está lanzando los errores anteriores cuando intenta enviar argumentos a un nombre de comando.

¿Fue útil?

Solución

Consulte http://download.autodesk.com/us/ maya / 2009help / CommandsPython / treeView.html : dragAndDropCommand es un STRING: estás pasando un método enlazado, Maya está usando su repr. No estoy seguro, pero sospecho que la cadena debería nombrar una función de nivel superior (nivel de módulo), no un método enlazado.

Otros consejos

A partir de Maya 2010, el widget treeView parece que todavía requiere un nombre de cadena de un procedimiento mel para ser utilizado para algunas de sus devoluciones de llamada, pero no para otros. Por ejemplo, el dragCallback y dropCallback funcionan como se espera, pero el selectCommand y otros no. Muchos otros widgets aceptan una función python para sus devoluciones de llamada. Aunque los documentos enumeran los argumentos de algunas devoluciones de llamada treeView como cadenas, no se indica que la cadena debe ser un nombre de procedimiento mel, y ciertamente es inconsistente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top