在单击的菜单项上显示 window Python Maya
show window on menuItem clicked Python Maya
我是 python 使用 Maya 编写脚本的新手 我想自动加载我创建的插件以在 Maya 主 Window 中显示自定义菜单。单击菜单项时,它使用我创建的函数显示 window。所以问题是:当我 运行 我的代码只是在 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)
首先千万不要把你的命令写成字符串,我想你有命名空间的问题。如果你真的想解析这样的变量,请尝试使用部分。如果你看我的帖子,我会给你一些建议。
所以试着改变你的台词:
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)
我是 python 使用 Maya 编写脚本的新手 我想自动加载我创建的插件以在 Maya 主 Window 中显示自定义菜单。单击菜单项时,它使用我创建的函数显示 window。所以问题是:当我 运行 我的代码只是在 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)
首先千万不要把你的命令写成字符串,我想你有命名空间的问题。如果你真的想解析这样的变量,请尝试使用部分。如果你看我的帖子,我会给你一些建议。
所以试着改变你的台词:
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)