在另一个方法中运行方法。蟒蛇

时间:2009-12-07 21:17:48

标签: python methods command maya

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

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 个答案:

答案 0 :(得分:2)

问题是mnDialog没有从mnMakeWin查找,你传递了名字,当你不在正确的范围内时,它会被查找。

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

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

答案 1 :(得分:1)

mnDialogmnProgRun中的局部变量。在功能范围之外无法访问它。如果您想要它,请在适当的范围内定义它。

  

(我没有python有一个全局和局部变量声明的印象。)

你有错误的印象。

答案 2 :(得分:1)

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

此外,它(几乎)总是不必要地使Python中的嵌套函数变得复杂。

答案 3 :(得分:0)

maya总是遇到问题, 你可以在函数外面定义mnDialog()和mnMakeWin(),在顶级的scoop级别, 它的maya问题不是来自python,因为我在从maya ui命令调用类方法时遇到问题(ex按钮事件)。

希望能帮到你:)。

##修改

将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' )

def mnProgRun():

    mnMakeWin()

#run

mnProgRun()