导入期间未定义名称
name is not defined during an import
我遇到了一个我无法理解的问题...
这是自动装配的初始代码的一部分:
def Legs():
Vleg = cmds.intSliderGrp('legs', q=True ,v=True)
if Vleg == 1:
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
elif Vleg == 2:
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
Leg02 = cmds.intSliderGrp('Leg2', l= 'Sym. Limb no.2', min=0, max=8, f=True)
elif Vleg == 3:
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
Leg02 = cmds.intSliderGrp('Leg2', l= 'Sym. Limb no.2', min=0, max=8, f=True)
Leg03 = cmds.intSliderGrp('Leg3', l= 'Sym. Limb no.3', min=0, max=8, f=True)
else :
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
Leg02 = cmds.intSliderGrp('Leg2', l= 'Sym. Limb no.2', min=0, max=8, f=True)
Leg03 = cmds.intSliderGrp('Leg3', l= 'Sym. Limb no.3', min=0, max=8, f=True)
Leg04 = cmds.intSliderGrp('Leg4', l= 'Sym. Limb no.4', min=0, max=8, f=True)
win = 'win'
win = cmds.window(win, s=True, t = 'Auto-rig Prototype')
cmds.showWindow(win)
cmds.columnLayout(adj=True)
cmds.separator(h = 5 )
cmds.intSliderGrp ('legs', l = 'Number of symetrical parts', min=1, max=4, v=1, f=True)
cmds.separator(h = 5 )
cmds.text(l='please execute commands in the APPROPRIATE order')
cmds.separator(h = 5 )
cmds.button (l = '1 : Set', c = 'Legs()')
cmds.separator(h = 5 )
cmds.button (l = '2 : Create Guides', c = 'Guide()')
cmds.separator(h = 5 )
cmds.button( l= '3 : Set Rig', c= 'rig()')
cmds.separator(h = 5 )
cmds.button( l= '4 : Set CTRLS', c= 'ctrl()')
cmds.separator(h = 5 )
cmds.button( l= '5 : Parent CTRLS', c= 'Par()')
cmds.separator(h = 5 )
cmds.button (l = 'Delete selection and unused nodes', c = 'Suppr()')
当我单独 运行 这个脚本时,一切都按预期工作,但后来我尝试导入它
import maya.cmds as cmds
import maya.mel as mel
def printNewMenuItem( item ):
if item == 'Arachnoid':
if cmds.window(InitWin, exists = True):
cmds.deleteUI(InitWin)
import SpidRig
else :
print str(item) + ' : this command is not scripted yet'
InitWin = cmds.window(t='Choose your rig')
if cmds.window(InitWin, exists = True):
cmds.deleteUI(InitWin)
cmds.window(t='Choose your rig')
cmds.columnLayout()
cmds.optionMenu( label='Rig Type', changeCommand=printNewMenuItem)
cmds.menuItem( label='Basic Humanoid' )
cmds.menuItem( label='Arachnoid' )
cmds.menuItem( label='Bird' )
cmds.showWindow( InitWin )
现在,根据时间的不同,要么 window 'Auto-rig Prototype' 永远不会打开,要么 returns 我这个错误 :
# Error: NameError: file <maya console> line 1: name 'Legs' is not defined #
我做错了什么?
尝试从您的命令中删除字符串:
cmds.button (l = '1 : Set', c = Legs)
然后像这样写你的命令:
def Legs(*args):
Vleg = cmds.intSliderGrp('legs', q=True ,v=True)
...
运行 从一个全新的 maya 重新启动,然后我们就可以调试了。
好像是namespace/import/global var和local var
的问题
喜欢这个错误:
# Error: NameError: file <maya console> line 1: name 'Legs' is not defined #
意思是当你点击这个按钮时:
cmds.button (l = '1 : Set', c = 'Legs()')
它试图执行这个乱码命令。但是,真你这样导入它:
import leg_script
您使用命名空间导入它:leg_script
例如,如果您这样导入:
import leg_script as leg
命名空间是:leg
在这两种情况下,您的 Leg proc 现在按字面意思写为 leg_script.Leg()
或 leg.Leg()
您可以使用 :
摆脱命名空间
from leg_script import *
但这是一种不好的做法,因为调试脚本会变得非常困难。
所以回顾一下这个问题,当你在命令中写乱码字符串时:
cmds.button (l = '1 : Set', c = 'Legs()')
如果您想忽略名称空间问题,您的脚本是导入问题:
cmds.button (l = '1 : Set', c = Legs)
这是正确的方法,否则您将不得不在字符串中写入名称空间:
cmds.button (l = '1 : Set', c = 'leg_script.Legs()')
但它不会在本地工作,而且只有在使用此命名空间调用时才有效....所以不要这样做!
我遇到了一个我无法理解的问题... 这是自动装配的初始代码的一部分:
def Legs():
Vleg = cmds.intSliderGrp('legs', q=True ,v=True)
if Vleg == 1:
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
elif Vleg == 2:
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
Leg02 = cmds.intSliderGrp('Leg2', l= 'Sym. Limb no.2', min=0, max=8, f=True)
elif Vleg == 3:
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
Leg02 = cmds.intSliderGrp('Leg2', l= 'Sym. Limb no.2', min=0, max=8, f=True)
Leg03 = cmds.intSliderGrp('Leg3', l= 'Sym. Limb no.3', min=0, max=8, f=True)
else :
Leg01 = cmds.intSliderGrp('Leg1', l= 'Sym. Limb no.1', min=0, max=8, f=True)
Leg02 = cmds.intSliderGrp('Leg2', l= 'Sym. Limb no.2', min=0, max=8, f=True)
Leg03 = cmds.intSliderGrp('Leg3', l= 'Sym. Limb no.3', min=0, max=8, f=True)
Leg04 = cmds.intSliderGrp('Leg4', l= 'Sym. Limb no.4', min=0, max=8, f=True)
win = 'win'
win = cmds.window(win, s=True, t = 'Auto-rig Prototype')
cmds.showWindow(win)
cmds.columnLayout(adj=True)
cmds.separator(h = 5 )
cmds.intSliderGrp ('legs', l = 'Number of symetrical parts', min=1, max=4, v=1, f=True)
cmds.separator(h = 5 )
cmds.text(l='please execute commands in the APPROPRIATE order')
cmds.separator(h = 5 )
cmds.button (l = '1 : Set', c = 'Legs()')
cmds.separator(h = 5 )
cmds.button (l = '2 : Create Guides', c = 'Guide()')
cmds.separator(h = 5 )
cmds.button( l= '3 : Set Rig', c= 'rig()')
cmds.separator(h = 5 )
cmds.button( l= '4 : Set CTRLS', c= 'ctrl()')
cmds.separator(h = 5 )
cmds.button( l= '5 : Parent CTRLS', c= 'Par()')
cmds.separator(h = 5 )
cmds.button (l = 'Delete selection and unused nodes', c = 'Suppr()')
当我单独 运行 这个脚本时,一切都按预期工作,但后来我尝试导入它
import maya.cmds as cmds
import maya.mel as mel
def printNewMenuItem( item ):
if item == 'Arachnoid':
if cmds.window(InitWin, exists = True):
cmds.deleteUI(InitWin)
import SpidRig
else :
print str(item) + ' : this command is not scripted yet'
InitWin = cmds.window(t='Choose your rig')
if cmds.window(InitWin, exists = True):
cmds.deleteUI(InitWin)
cmds.window(t='Choose your rig')
cmds.columnLayout()
cmds.optionMenu( label='Rig Type', changeCommand=printNewMenuItem)
cmds.menuItem( label='Basic Humanoid' )
cmds.menuItem( label='Arachnoid' )
cmds.menuItem( label='Bird' )
cmds.showWindow( InitWin )
现在,根据时间的不同,要么 window 'Auto-rig Prototype' 永远不会打开,要么 returns 我这个错误 :
# Error: NameError: file <maya console> line 1: name 'Legs' is not defined #
我做错了什么?
尝试从您的命令中删除字符串:
cmds.button (l = '1 : Set', c = Legs)
然后像这样写你的命令:
def Legs(*args):
Vleg = cmds.intSliderGrp('legs', q=True ,v=True)
...
运行 从一个全新的 maya 重新启动,然后我们就可以调试了。 好像是namespace/import/global var和local var
的问题喜欢这个错误:
# Error: NameError: file <maya console> line 1: name 'Legs' is not defined #
意思是当你点击这个按钮时:
cmds.button (l = '1 : Set', c = 'Legs()')
它试图执行这个乱码命令。但是,真你这样导入它:
import leg_script
您使用命名空间导入它:leg_script
例如,如果您这样导入:
import leg_script as leg
命名空间是:leg
在这两种情况下,您的 Leg proc 现在按字面意思写为 leg_script.Leg()
或 leg.Leg()
您可以使用 :
摆脱命名空间from leg_script import *
但这是一种不好的做法,因为调试脚本会变得非常困难。
所以回顾一下这个问题,当你在命令中写乱码字符串时:
cmds.button (l = '1 : Set', c = 'Legs()')
如果您想忽略名称空间问题,您的脚本是导入问题:
cmds.button (l = '1 : Set', c = Legs)
这是正确的方法,否则您将不得不在字符串中写入名称空间:
cmds.button (l = '1 : Set', c = 'leg_script.Legs()')
但它不会在本地工作,而且只有在使用此命名空间调用时才有效....所以不要这样做!