#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. Я совершенно неправильно понял эту часть поста, вау, я чувствую себя глупо, ха-ха, Что ж, большое вам спасибо, это абсолютно решило мою проблему. Спасибо!