导入期间未定义名称

时间:2020-03-25 11:57:54

标签: python maya

我遇到一个我听不懂的问题... 这是自动装配的初始代码的一部分:

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 )

现在,根据时间的不同,或者窗口“ Auto-rig Prototype”(自动装配原型)永远不会打开,或者它会向我返回此错误:

# Error: NameError: file <maya console> line 1: name 'Legs' is not defined # 

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

尝试从命令中删除字符串:

cmds.button (l = '1 : Set', c = Legs)

并像这样编写您的命令:

def Legs(*args):
    Vleg = cmds.intSliderGrp('legs', q=True ,v=True)
    ...

从重新启动的新Maya运行,然后,我们将能够进行调试。 似乎是名称空间/导入/全局变量和本地变量的问题

喜欢这个错误:

# Error: NameError: file <maya console> line 1: name 'Legs' is not defined # 

这意味着当您单击此按钮时:

cmds.button (l = '1 : Set', c = 'Legs()')

它尝试执行此垃圾命令。但是,zhen是这样导入的:

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

但是它仅在使用此命名空间调用时才在本地和其他地方起作用。...所以不要这样做!