【问题标题】:show window on menuItem clicked Python Maya在 menuItem 上显示窗口单击 Python Maya
【发布时间】:2019-06-18 10:00:11
【问题描述】:

我是使用 Maya 编写 Python 脚本的新手,我想自动加载我创建的插件,以在 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)

【问题讨论】:

    标签: python plugins maya


    【解决方案1】:

    首先永远不要把你的命令写成字符串,我想你有命名空间的问题。如果你真的想解析这样的变量,请尝试使用部分。如果你看我的帖子,我会给你一些建议。

    所以试着改变你的台词:

    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)
    

    【讨论】:

    • 感谢您的重播,这是正确的答案。在你发布之前我试过了!
    • 你能帮我做点别的吗?请! (同题:在Maya中用python构建接口)
    • 确保您可以创建另一个 rstack 帖子,或者如果它不太不同,您可以编辑您的帖子
    • 你能打开一个堆栈溢出聊天,以便我向你解释我需要什么吗?
    • 确定你房间的名字是什么
    猜你喜欢
    • 2014-12-02
    • 2015-12-31
    • 1970-01-01
    • 2017-02-20
    • 2015-06-27
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多