我在另一个内部调用方法。我得到的这个脚本的错误是
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()
答案 0 :(得分:2)
问题是mnDialog
没有从mnMakeWin
查找,你传递了名字,当你不在正确的范围内时,它会被查找。
可能会传递函数而不是名称。我没有安装maya,所以我无法尝试。
否则你必须在全局范围内定义mnDialog,这对我来说似乎是一个奇怪的限制
答案 1 :(得分:1)
mnDialog
是mnProgRun
中的局部变量。在功能范围之外无法访问它。如果您想要它,请在适当的范围内定义它。
(我没有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()