2014-02-18 7 views
1

Я читал здесь, но я не мог найти какое-либо решение в Интернете, чтобы решить мою проблему. Я думаю, что у меня есть отступ справа, но я до сих пор получаю сообщение об ошибке. помогите мне пожалуйста. Этот скрипт должен запустить новую панель в майе, которая работает, но ошибка действительно раздражает.NameError: name '__main__' не определен

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 # 
+2

Ваш код не имеет '__main__' в нем. Покажите нам фактический код, который дает эту ошибку – mhlester

+0

похоже, что вы используете нестандартную консоль python (майя-консоль) ... это, вероятно, проблема ... Я бы посмотрел на их форумах –

+1

... и, пожалуйста, напишите * * минимальный ** код, который проявляет эту проблему. 99% вашего кода здесь не имеет значения. –

ответ

2

Ваша проблема была несколько вещей, я включил только несколько базовых разделов кода, так как остальные не нужны.

Проблема была __name__, если бы это было указано, у нас не было бы проблем, поскольку это просто имя, а не что-то особенное, я просто переименую это в name.

Проблема две были дублирующимися именами на панелях/панелях. IE:

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

Maya не понравилось, что и тип панели, и панель имели одинаковые имена.

Итак:

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() 
+0

Хотя кажется бессмысленным называть 'str' на' namespace', крайне маловероятно, что это имеет какое-либо отношение к ошибке. – user2357112

+0

Убирает ошибку __main__, теперь я получаю: # Ошибка: объект «PanelWindow» не имеет атрибута «name» # Traceback (последний последний звонок): # Файл «», строка 50, в # Файл «», строка 9, в __init__ # AttributeError: объект «PanelWindow» не имеет атрибута «name» # – arvidurs

+0

... или, может быть, я чего-то не хватает. Я склонен думать, что различие связано с чем-то, не связанным с этим изменением, например, выключением и повторным включением переводчика, но с понижением вниз. – user2357112

5

При выполнении сценариев Python интерпретатор Python устанавливает переменную __name__ быть строковое значение "__main__" для модуля выполняется (как правило, эта переменная содержит имя модуля).

Общепринято проверить значение этой переменной, чтобы узнать, импортирован ли ваш модуль для использования в качестве библиотеки, или если он выполняется непосредственно. Таким образом, вы часто видите этот блок кода в конце модулей:

if __name__ == '__main__': 
    # do stuff 

Я подозреваю, что вы не оставили строковые кавычки прочь из '__main__', который дает NameError вы видите

>>> if __name__ == __main__: 
...  pass 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '__main__' is not defined 
Смежные вопросы