在一个方法内运行另一个方法. python

1 投票
4 回答
1510 浏览
提问于 2025-04-15 16:46

我在一个方法里调用另一个方法,但我遇到了一个错误,错误信息是:

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 个回答

1

mnDialog 是在 mnProgRun 这个函数里面定义的一个局部变量。也就是说,它只能在这个函数内部使用,外面是无法访问到的。如果你想让它在外面也能用,就需要在合适的地方定义它。

(我之前觉得 Python 没有全局和局部变量的区分。)

你这个理解是错的。

1

你应该把 mnDialog 定义在最外层。现在的位置不对。

而且,在Python中,把函数放在另一个函数里面(也就是嵌套函数)几乎总是让事情变得复杂,不太必要。

2

问题在于,mnDialog没有从mnMakeWin中找到。你传递的是名字,但在后面查找的时候,你不在正确的范围内。

你可以试着直接传递这个函数,而不是名字。我没有安装maya,所以无法测试这个方法。

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

撰写回答