2009-05-04 14 views
1

Ich verwende das TreeView-Steuerelement in Maya 2009, aber ich bekomme einen Syntaxfehler beim Ziehen und Ablegen. Mein Code ist wie folgt (vereinfacht der Kürze halber):Warum verursacht Maya 2009 TreeView-Steuerelement einen Syntaxfehler beim Ziehen?

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" 

Wenn ich per Drag & Drop und Element, das ich den folgenden Befehl erhalten wird, in der Konsole ausgeführt:

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

und nutzen Sie die folgende Fehlermeldung:

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

EDIT: Es stellt sich heraus, dass die Fragen, die ich mit war aufgrund der TreeView waren Umsetzung noch MEL-Funktion auf den meisten i ruft ts Ereignisrückrufe. Die obigen Fehler werden vom MEL-Interpreter ausgelöst, wenn versucht wird, Argumente an einen Befehlsnamen zu übergeben.

Antwort

1

Siehe http://download.autodesk.com/us/maya/2009help/CommandsPython/treeView.html: dragAndDropCommand ist ein STRING - Sie übergeben eine gebundene Methode, Maya verwendet seine Rep. Ich bin mir nicht sicher, aber ich vermute, dass string sollte eine Top-Level-Funktion (Modulebene), nicht eine gebundene Methode.

+0

Aha! Guter Fang! Was lustig ist, ist, dass ich das schon früher hatte, als ich darüber nachdenke. Aber der Fehler ist so zweideutig, dass ich nie daran denke, den Typ zu überprüfen. – Soviut

0

Ab Maya 2010 scheint das treeView-Widget immer noch den String-Namen einer Mel-Prozedur zu benötigen, die für einige seiner Callbacks verwendet wird, nicht aber für andere. Zum Beispiel funktionieren DragCallback und dropCallback wie erwartet, aber der selectCommand und andere nicht. Viele andere Widgets akzeptieren eine Python-Funktion für ihre Rückrufe. Obwohl die Dokumente die Argumente für einige treeView-Callbacks als Strings auflisten, wird nicht gesagt, dass die Zeichenfolge ein Name der mel-Prozedur sein muss, und sie ist sicherlich inkonsistent.