Perché il controllo TreeView di Maya 2009 genera un errore di sintassi durante il trascinamento?

StackOverflow https://stackoverflow.com/questions/820697

Domanda

Sto usando il controllo TreeView in Maya 2009 ma sto ricevendo un errore di sintassi durante il trascinamento della selezione. Il mio codice è il seguente (semplificato per brevità):

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"

Quando trascino e rilascia l'elemento ed ottengo il seguente comando viene eseguito nella console:

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

E ottieni il seguente errore:

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

EDIT: Si scopre che i problemi che stavo avendo erano dovuti al fatto che TreeView implementava ancora le chiamate di funzione MEL sulla maggior parte dei callback degli eventi. Gli errori sopra riportati vengono generati dall'interprete MEL mentre tenta di alimentare argomenti con un nome di comando.

È stato utile?

Soluzione

Vedi http://download.autodesk.com/us/ maya / 2009help / CommandsPython / treeView.html : dragAndDropCommand è una STRING - stai passando un metodo associato, Maya sta usando il suo repr. Non sono sicuro, ma sospetto che la stringa debba nominare una funzione di livello superiore (a livello di modulo), non un metodo associato.

Altri suggerimenti

A partire da Maya 2010, il widget treeView sembra richiedere ancora un nome stringa di una procedura mel da utilizzare per alcuni dei suoi callback, ma non per altri. Ad esempio, dragCallback e dropCallback funzionano come previsto, ma selectCommand e altri no. Molti altri widget accettano una funzione Python per i loro callback. Anche se i documenti elencano gli argomenti di alcuni callback di treeView come stringhe, non si afferma che la stringa debba essere un nome di procedura mel ed è certamente incoerente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top