Проблема с Python в Майе говорит, что моя функция не определена

#python #maya

Вопрос:

Так что я буду честен, я здесь немного превышаю свой вес, и я не совсем понимаю, что я делаю, но по мере того, как это происходит, я учусь и заставляю все работать, так что я нахожусь на той стадии, когда я все еще извлекаю ценные уроки о том, как думать наперед. Итак, у меня есть два каталога, один с 47 изображениями, и один с 47 каталогами, у которых одинаковые имена, соответствующие изображениям. Например, если есть изображение с именем, «img_05.jpg», затем есть также каталог с именем «img_05». Идея заключается в том, что я создал окно, которое просматривает каталог изображений и создает кнопку image_icon для каждого изображения, согласно приведенному ниже коду:

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

imagePath = 
    'C:/IMAGES/_ICONS_/'
if cmds.window('window1', q=1, ex=1):
    cmds.deleteUI('window1')
cmds.window('window1', t='SCAN IMPORTER', mb=1)
cmds.gridLayout(cw=150, w=500, nc=8, h=800, ch=150)

getImgList = os.listdir(imagePath)

# print getImgList

i = 0
for i in getImgList:
    ImgNamStr = i
    ImgNamNum1 = ImgNamStr.split('.')

    # print ImgNamNum1[0]

    scanBtn = cmds.iconTextButton(i=imagePath   i, c='scanImp("'   i
                                    '")', dcc='scan_light("'   i
                                    '")')

cmds.showWindow('window1')
 

У меня есть другие функции, определенные как таковые,

 def scanImp(*args):
    print args[0]   ' '   ' was pushed.'
    ImgNmNoExt = args[0].split('.')

  # print ImgNmNoExt[0]

    ScanBtnPath = imagePath   ImgNmNoExt[0]
    print 'the directory is:'   ' '   ScanBtnPath
 

И когда я запускаю это через редактор сценариев maya, все работает так, как ожидалось. Однако, когда я отправляю его через кнопку «Полка» (каталог сценария добавляется в путь при запуске), я получаю сообщение об ошибке, в котором говорится, что scanImp не определен. Я упускаю что-то действительно очевидное здесь?

*отредактировано, чтобы исправить название функции

Ответ №1:

Похоже, что ваше сообщение об ошибке и код отличаются, потому что функция не вызывается scanBusImp() . Помимо этой ошибки, основная проблема заключается в том, как работает пользовательский интерфейс в Maya. Вы можете попробовать:

     scanBtn = cmds.iconTextButton(i=imagePath   i, c='import scanimporter; scanimporter.scanBusImp("'   i
                                '")', dcc='scan_light("'   i
                                '")')
 

Чтобы это сработало. scanimporter это имя, которое я дал файлу сценария. По этой причине я рекомендую использовать классы для работы с пользовательским интерфейсом и обратными вызовами, что облегчает работу. Если вы используете класс, вы можете просто вызвать метод следующим образом:

 def scanBusImp(self, *args):
    importSomething

def createUI(self):
    self.scanBtn = cmds.iconTextButton(i=imgpath..., c=self.scanBusImp)
 

Комментарии:

1. Итак, я на самом деле просто допустил опечатку в изменении некоторых имен, когда опубликовал это здесь, чтобы облегчить чтение, так что это точно не проблема (спасибо, что уловили это для этих целей), тогда мой вопрос стоит о классах, мне нужно прочитать об этом, но будет ли тот факт, что у него нет учетной записи класса, объяснять тот факт, что он не распознает функцию?

2. Если у вас нет класса и доступа к его членам, вам понадобится глобальная функция. Вот причина, по которой я добавил import scanimporter команду в первом примере. Без этого пользовательский интерфейс окна просто не видит эту функцию.

3. Я совершенно неправильно понял эту часть поста, вау, я чувствую себя глупо, ха-ха, Что ж, большое вам спасибо, это абсолютно решило мою проблему. Спасибо!