показать окно в меню. Элемент нажал на Python Maya - PullRequest
0 голосов
/ 18 июня 2019

Я новичок в написании скриптов на Python с использованием Maya. Я хочу автоматически загрузить плагин, который я создал для отображения пользовательского меню в главном окне Maya.При нажатии на пункт меню, оно показывает окно с помощью функции, которую я создаю.Итак, проблема: когда я запускаю свой код просто в интерфейсе Maya, он работает правильно, но когда я помещаю свой код в файл python и автоматически загружаю его, он каждый раз показывает другую ошибку: иногда эта ошибка отображается при нажатии на элемент менюпервый раз, когда он загружается при открытии Maya:

# Error: NameError: file <maya console> line 1: name 'createUI' is not defined #

И иногда он показывает эту ошибку:

// Warning: file: C:/Program Files/Autodesk/MAYA20185/Maya2018/scripts/others/pluginWin.mel line 290: No initializePlugin() or initializePlugin2() function
 // 
// Error: file: C:/Program Files/Autodesk/MAYA20185/Maya2018/scripts/others/pluginWin.mel line 290:  (userInterface) //

Это мой код: userInterface.py

import maya.cmds as cmds
import functools
import pymel.core as pm

def createUI(pWindowTitle):
    windowID = 'myWindowID'
    if cmds.window(windowID, exists=True):
        cmds.deleteUI(windowID)
    cmds.window(windowID, title=pWindowTitle, sizeable=False, resizeToFitChildren=True)
    cmds.rowColumnLayout(numberOfColumns=3, columnWidth=[(1,75), (2,60), (3,60) ], columnOffset=[(1,'right',3)])
    cmds.text(label='Time Range:')
    startTimeField = cmds.intField(value=cmds.playbackOptions(q=True, minTime=True))
    endTimeField = cmds.intField(value=cmds.playbackOptions(q=True, maxTime=True))
    cmds.text( label='Attribute:' )
    targetAttributeField = cmds.textField( text='rotateY' )
    cmds.separator( h=10, style='none' )
    cmds.separator( h=10, style='none' )
    cmds.separator( h=10, style='none' )
    cmds.separator( h=10, style='none' )
    cmds.separator( h=10, style='none' )
    def cancelCallback(*pArgs):
        if cmds.window(windowID, exists=True ):
            cmds.deleteUI(windowID)
    cmds.button(label='Cancel',command=cancelCallback)
    cmds.showWindow()

def keyFullRotation(pObjectName, pStartTime, pEndTime, pTargetAttribute):
    cmds.cutKey( pObjectName, time=(pStartTime, pEndTime), attribute=pTargetAttribute)
    cmds.setKeyframe( pObjectName, time=pStartTime, attribute=pTargetAttribute, value=0)
    cmds.setKeyframe( pObjectName, time=pEndTime, attribute=pTargetAttribute, value=360)    
    cmds.selectKey( pObjectName, time=(pStartTime, pEndTime), attribute=pTargetAttribute, keyframe=True)    
    cmds.keyTangent( inTangentType='linear', outTangentType='linear' )

MainMayaWindow = pm.language.melGlobals['gMainWindow'] 
customMenu = pm.menu('TestMenu', parent=MainMayaWindow)
pm.menuItem(label="menu item 'hihi'", command="createUI('My Title')", parent=customMenu)

1 Ответ

1 голос
/ 18 июня 2019

Сначала никогда не пишите свою команду в виде строки, я полагаю, у вас проблема с пространством имен. Если вы действительно хотите разобрать такую ​​переменную, попробуйте использовать частичный. Если вы посмотрите на мои сообщения, я даю советы по этому поводу.

Итак, попробуйте изменить свои строки:

def createUI():
    pWindowTitle = 'somethingFix'
    windowID = 'myWindowID'
    if cmds.window(windowID, exists=True):
        cmds.deleteUI(windowID)
    cmds.window(windowID, title=pWindowTitle, sizeable=False, resizeToFitChildren=True)



pm.menuItem(label="menu item 'hihi'", command=createUI, parent=customMenu)
...