在一个方法内运行另一个方法. 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()
4 个回答
1
mnDialog
是在 mnProgRun
这个函数里面定义的一个局部变量。也就是说,它只能在这个函数内部使用,外面是无法访问到的。如果你想让它在外面也能用,就需要在合适的地方定义它。
(我之前觉得 Python 没有全局和局部变量的区分。)
你这个理解是错的。
1
你应该把 mnDialog
定义在最外层。现在的位置不对。
而且,在Python中,把函数放在另一个函数里面(也就是嵌套函数)几乎总是让事情变得复杂,不太必要。
2
问题在于,mnDialog
没有从mnMakeWin
中找到。你传递的是名字,但在后面查找的时候,你不在正确的范围内。
你可以试着直接传递这个函数,而不是名字。我没有安装maya,所以无法测试这个方法。
否则,你就得在全局范围内定义mnDialog
,这对我来说似乎是个奇怪的限制。