Question

J'utilise le contrôle TreeView dans Maya 2009, mais je reçois une erreur de syntaxe lors d'un glisser-déposer. Mon code est le suivant (simplifié par souci de concision):

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"

Lorsque je glisse et dépose un élément, la commande suivante est exécutée dans la console:

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

Et obtenez l'erreur suivante:

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

MODIFIER: Il s’avère que les problèmes que je rencontrais étaient dus au fait que TreeView implémentait toujours des appels de fonction MEL sur la plupart de ses rappels d’événement. Les erreurs ci-dessus sont générées par l'interpréteur MEL qui tente de fournir des arguments à un nom de commande.

Était-ce utile?

La solution

Voir http://download.autodesk.com/us/ maya / 2009help / CommandsPython / treeView.html : dragAndDropCommand est une STRING - vous passez une méthode liée, Maya utilisant sa repr. Je ne suis pas sûr, mais je soupçonne que cette chaîne devrait nommer une fonction de niveau supérieur (au niveau du module), pas une méthode liée.

Autres conseils

Depuis Maya 2010, le widget treeView semble toujours exiger le nom de chaîne d'une procédure mel à utiliser pour certains de ses rappels, mais pas pour d'autres. Par exemple, les fonctions dragCallback et dropCallback fonctionnent comme prévu, mais pas la commande select, ni les autres. De nombreux autres widgets acceptent une fonction python pour leurs rappels. Même si la documentation répertorie les arguments de certains rappels d'arborescence sous forme de chaînes, il n'est pas précisé que la chaîne doit être un nom de procédure mel et elle est certainement incohérente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top