名称错误:未定义名称'\u main\u'

2024-10-03 13:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在读这本书,但是我在网上找不到任何解决方法来解决我的问题。我想我的缩进是对的,但是我仍然有名字错误。有人能帮我一下吗。 这个脚本应该在maya中运行一个新的面板,这有点正常,但是这个错误确实很烦人。

class PanelWindow( object ):
    def __init__( self, name, title, namespace=__name__ ):
        self.__name__ = name
        self._title = title
        self.instance = str(namespace) + '.' + self.__name__

        if not pm.scriptedPanelType(self.__name__, q = True, ex = True):
            pm.scriptedPanelType(self.__name__, u = True)

        jobCmd = 'python(\\\"%s._setup()\\\")' % self.instance
        job = "scriptJob -replacePrevious -parent \"%s\" -event \"SceneOpened\" \"%s\";" % ( self.__name__, jobCmd )
        mel.eval(job)

        pm.scriptedPanelType( self.__name__, e = True,
                       unique=True,
                       createCallback = 'python("%s._createCallback()")' % self.instance,
                       initCallback = 'python("%s._initCallback()"  )' % self.instance,
                       addCallback = 'python("%s._addCallback()"   )' % self.instance,
                       removeCallback = 'python("%s._removeCallback()")' % self.instance,
                       deleteCallback = 'python("%s._deleteCallback()")' % self.instance,
                       saveStateCallback = 'python("%s._deleteCallback()")' % self.instance
                        )


    def _setup(self):
        """Command to be call for new scene"""
        panelName = pm.sceneUIReplacement( getNextScriptedPanel=(self.__name__, self._title) )
        if panelName == '':
            try:
                panelName = pm.scriptedPanel( mbv=1, unParent=True, type=self.__name__, label=self._title )
            except:
                pass
        else:
            try:
                label = panel( self.__name__, query=True, label=True )
                pm.scriptedPanel( self.__name__, edit=True,  label=self._title )
            except:
                pass
    def _addCallback(self):
        """Create UI and parent any editors."""
        print 'ADD CALLBACK'
    def show( self ):        
        mel.eval('tearOffPanel "%s" %s true;' % (self._title, self.__name__) )


global test
test = PanelWindow('myName', 'Light')

test.show()


# NameError: name '__main__' is not defined # 
# Error: line 1: name '__main__' is not defined
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
# NameError: name '__main__' is not defined # 

Tags: instancenametestselftruetitlemaindef
2条回答

在执行Python脚本时,Python解释器将名为__name__的变量设置为正在执行的模块的字符串值"__main__"(通常此变量包含模块名)。

通常检查此变量的值,以查看您的模块是作为库导入的,还是直接执行的。因此,您经常在模块末尾看到这段代码:

if __name__ == '__main__':
    # do stuff

我怀疑您把字符串引号从'__main__'中去掉了,这就给出了您看到的名称错误

>>> if __name__ == __main__:
...     pass
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__main__' is not defined

你的问题是一些东西,我只包括了一些基本的部分,因为其余的不需要。

问题一是__name__,如果引用了这个,我们就不会有问题了,因为它只是一个名字,没有什么特别的,我只想将它重命名为name

问题二是面板/面板类型上的名称重复。即:

pm.scriptedPanelType(self.__name__, u = True)
pm.scriptedPanel( self.__name__, edit=True,  label=self._title )

玛雅不喜欢panelType和panel都有相同的名称。

所以:

import maya.cmds as cmds
import pymel.core as pm
import maya.mel as mel

class PanelWindow( object ):
    def __init__(self, name, title):

        self._name = name
        self._title = title
        self.panelTypeName = self._name + "Type"



        if not pm.scriptedPanelType(self.panelTypeName, query=True, exists=True):
            pm.scriptedPanelType(self.panelTypeName, unique=True)

        if not pm.scriptedPanel(self._title, query=True, exists=True):
            ## Only allows one instance
            pm.scriptedPanel(self._title, menuBarVisible=1, unParent=True, type=self.panelTypeName, label=self._title )

    def _addCallback(self):
        """Create UI and parent any editors."""
        print 'ADD CALLBACK'        


    def show( self ):  
        mel.eval('tearOffPanel "%s" "%s" true;' % (self._title, self._name) )  



PanelWindow('lightControlType1', 'lightControl').show()

相关问题 更多 >