2015-11-25 1 views
0

У меня проблема с вызовами функций из nameCommand's в Maya, которые используются с горячими клавишами. Я не могу сказать, является ли это проблемой майя или Python.Имя MayaCommand не может вызвать функции

Следующая MEL работает, как ожидалось

proc myTest() { 
    print("test"); 
} 

nameCommand -ann "test" -command "myTest()" testCommand; 
hotkey -k "l" -name "testCommand"; 

Однако, в переводе на Python, я получаю сообщение об ошибке

import maya.cmds as cmds 

def myPythonTest(): 
    print("myPythonTest") 

cmds.nameCommand("pythonTestCommand", ann="pythonTest", command="myPythonTest()", sourceType="python") 
cmds.hotkey(k="l", name="pythonTestCommand") 

// Error: line 1: Cannot find procedure "myPythonTest". 

Это неправильный способ вызова функций в Python, или что-то еще на? Я заметил, что скобки разделяются, и вызов функции с помощью myPythonTest() из редактора сценариев работает так, как ожидалось.

ответ

1
cmds.nameCommand("pythonTestCommand", ann="pythonTest", command='python("myPythonTest()")', sourceType="python") 
cmds.hotkey(k="l", name="pythonTestCommand") 

Должно работать

+0

Спасибо, это было именно то, что было необходимо. Из любопытства и понимания: Почему это работает? Что делает python ("")? –

+0

Я не думаю, что sourceType на самом деле работает, поэтому с помощью команды python mel вызывать функцию python больше здесь http://help.autodesk.com/cloudhelp/2015/ENU/Maya-Tech-Docs/Commands/python.html – Achayan

+0

Я вижу. Я попытался выполнить поиск в googling для функции python, а также посмотрел в документации для него, однако в командах python вместо mel. Но здорово, имеет несколько смысл, и спасибо, что вернулись ко мне. –

0

Чтобы расширить предыдущий ответ я считаю, Achayan правильно в Assesment , что SourceType, кажется, сломана.

Если вы хотите, чтобы иметь возможность передать код питона в nameCommand вам нужно сначала создать runTimeCommand

def testy(): 
    print('hello') 

# There is no way to edit a runtime command so we need to check if it 
# exists and then remove it if it does. 
my_command_name = 'my_runtime_command' 
if cmds.runTimeCommand(my_command_name, q=True, exists=True): 
    cmds.runTimeCommand(my_command_name, e=True, delete=True) 

cmds.runTimeCommand(
    my_command_name, 
    ann='My Command', 
    category='User', 
    command='testy()', 
    commandLanguage='python' 
    ) 
cmds.nameCommand('my_name_command', ann='My Command', command=my_command_name) 
cmds.hotkey(k='1', name='my_name_command') 

Как вы видите, что вам не нужно, чтобы обеспечить SourceType, то nameCommand просто строковое представление runtimecommand и просто выполнит , указанный runTimeCommand. Таким образом, реальное место для указания языка исполнения находится в флагом commandLanguagerunTimeCommand.

 Смежные вопросы

  • Нет связанных вопросов^_^