2009-12-07 109 views
1

我正在调用另一个方法。和我得到的这个脚本的错误是在另一种方法中运行一个方法。 python

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() 

回答

1

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

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

你有错误的印象。

+0

感谢您的回复,我一直在学习新东西 – marcus 2009-12-09 23:13:58

1

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

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

+0

有一个理由嵌套它的大方法。所以玛雅人可以在启动时将它作为一个重要的方法进行调用和提供,定义外部会导致它无法在第一个地方找到它。会不会有这个? – marcus 2009-12-09 23:13:25

2

问题在于mnDialog没有从mnMakeWin中查找,您正在传递该名称,稍后在不在正确范围内时查找该名称。

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

否则,你就必须在全球范围内,这似乎是一个奇怪的限制,我

+0

感谢您的回复,您可以举一个简单的例子来传递一个函数,而不是一个名字,也许是一个打印“hello”的例子。 – marcus 2009-12-09 23:11:01

0

玛雅总是有勺问题来定义mnDialog, 你可以定义mnDialog()和mnMakeWin()函数外,在顶级搜索水平, 它的玛雅问题不是来自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') 

高清mnProgRun():

mnMakeWin() 

#run

mnProgRun()

+0

有没有办法继续执行python脚本,因为我在用户etup.mel中找到它。 – marcus 2009-12-10 00:29:34

+0

是的。 如上所述,将您的功能移动到顶级搜索级别(模块级别) 然后尝试获取它们,就像我的编辑一样 – 2009-12-10 07:57:11

相关问题