Почему элемент управления Maya 2009 TreeView выдает синтаксическую ошибку при перетаскивании?

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

Вопрос

Я использую элемент управления TreeView в Maya 2009, но получаю синтаксическую ошибку при перетаскивании. Мой код выглядит следующим образом (для краткости упрощен):

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, и это, безусловно, противоречиво.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top