1

我在另一个中调用一个方法。我得到的这个脚本的错误是

NameError: name 'mnDialog' is not defined

有什么原因吗?我认为这与执行不在全局级别的命令有关。(我不认为 python 有一个全局和局部变量声明。)什么是正确的语法或绕过这个?感谢您的时间。


import maya.cmds as cmds
def mnProgRun():
    def mnDialog(*args):
        cmds.confirmDialog( title='Confirm', message='Are you sure?',button=['Yes','No'], defaultButton='Yes',cancelButton='No',dismissString='No' )
    def mnMakeWin():
        cmds.window( 'mnWin', title = 'testman', wh=(260,100))
        cmds.columnLayout(adjustableColumn=False, columnAlign='center')
        cmds.button( label="Yes,it works",align='center',width=120,height=25, backgroundColor=[0.5,1,0.5],command='cmds.scriptJob( event=["SelectionChanged","mnDialog"])')
        cmds.button( label="No, Thank You!",align='center',width=120,height=25, backgroundColor=[1,0.5,0.5],command='cmds.deleteUI("mnWin")')
    cmds.showWindow( 'mnWin' )
    mnMakeWin()
mnProgRun()

4

4 回答 4

2

问题是mnDialog没有从中查找mnMakeWin,您正在传递名称,并且稍后当您不在正确的范围内时会查找它。

传递函数而不是名称可能会起作用。我没有安装maya,所以无法尝试。

否则,您必须在全局范围内定义 mnDialog,这对我来说似乎是一个奇怪的限制

于 2009-12-07T21:26:22.307 回答
1

mnDialog是 中的局部变量mnProgRun。它在函数范围之外是不可访问的。如果您想要它,请在适当的范围内定义它。

(我不认为 python 有全局和局部变量声明。)

你有错误的印象。

于 2009-12-07T21:21:56.667 回答
1

您应该mnDialog在顶层定义。它不在正确的命名空间中。

此外,在 Python 中嵌套函数(几乎)总是不必要地复杂化。

于 2009-12-07T21:22:09.850 回答
0

玛雅总是有勺子问题,您可以在函数外部定义 mnDialog() 和 mnMakeWin(),在顶级勺子级别,它的玛雅问题不是来自 python,因为我在从玛雅 ui 命令调用类方法时遇到问题(例如按钮事件)。

希望对你有帮助:)

##编辑

将 maya.cmds 导入为 cmds

def mnDialog(*args):

    cmds.confirmDialog( title='Confirm', message='Are you sure?',button=['Yes','No'],

                          defaultButton='Yes',cancelButton='No',dismissString='No' )

def mnMakeWin():

    cmds.window( 'mnWin', title = 'testman', wh=(260,100))

    cmds.columnLayout(adjustableColumn=False, columnAlign='center')

    cmds.button( label="Yes,it works",align='center',width=120,height=25, 
                 backgroundColor=[0.5,1,0.5],command='cmds.scriptJob( event=
                   ["SelectionChanged","mnDialog"])')

    cmds.button( label="No, Thank You!",align='center',width=120,height=25, 
                backgroundColor=[1,0.5,0.5],command='cmds.deleteUI("mnWin")')

    cmds.showWindow( 'mnWin' )

定义 mnProgRun():

    mnMakeWin()

#跑

mnProgRun()

于 2009-12-08T07:53:47.040 回答