Прошло некоторое время, когда я делал скрипты python после 8 месяцев перерыва. На самом деле нужны некоторые идеи. Я пытаюсь установить или изменить атрибут filmback/film gate камеры через кодирование, и после долгих проб и ошибок я наконец нашел для него команду, но теперь я встречаюсь с некоторыми другими проблемами.Python, добавляющий 2D-массив?
Первый элемент в списке, с точки зрения Python - индекс обычно начинается с 0, однако в Maya термин для этого filmbackMenu, она начинается с 1.
cmds.optionMenu('filmbackMenu', edit = True, select = 0) # Errors-out, stating that it is out of range
cmds.optionMenu('filmbackMenu', edit = True, select = 1) # No errors
Предположим, если мой filmback меню выглядит следующим образом:
list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03']
list01.insert(0,"")
for index, item in enumerate(list01):
print index, item
пока мне удается найти способ мои объекты начинаются с индекса «1», вставляя фиктивный/пустой. Поскольку я пытаюсь отфильтровать что-либо, содержащее «-01», и добавить как имя, так и индекс в список02, однако я знаю только, как это сделать для или просто имя или индекс, но я считаю, что мне нужны оба. Это мой раздел кода:
list02 = []
for i in list01:
if '-01' in str(i):
list02.append(i)
# Result: ['itemA-01', 'itemD-01', 'itemE-01'] # The index here should be 1, 4, 5
Можно ли одновременно добавить имя и индекс? Например, itemA-01 1, 'itemD-01' 4, 'itemE-01' 5? Индекс не обязательно должен отображаться в пользовательском интерфейсе, имя будет выполняться, но мне нужно будет получить значение индекса в конце концов ...
Пожалуйста, см. Ниже мой код, возможно, это может дать лучшее понимание и, пожалуйста, сделайте не стесняйтесь критиковать, если нужно.
import maya.cmds as cmds
list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03']
list01.insert(0,"")
for index, item in enumerate(list01):
print index, item
list02 = []
for i in list01:
if '01' in str(i):
list02.append(i)
window = cmds.window()
cmds.columnLayout()
cmds.optionMenu (label = 'Select a format')
for x in list02:
cmds.menuItem(label=x)
cmds.button(label = 'Ok')
cmds.button(label = 'Cancel')
cmds.showWindow(window)
Что происходит с моим пользовательским интерфейсом, так это то, что при выборе пользователем, например. если я выбрал itemD-01, который является индексом 4, следующий код должен работать:
cmds.optionMenu('filmbackMenu', edit = True, select = 4)
Обратите внимание, что флаг для выбора будет изменен ..
круто, не знал, что я могу перечислить его таким образом ... Интересно, есть ли у вас какие-либо идеи относительно того, как я могу вернуть значение в флагом 'command' в' cmds.button'? Когда я пробовал что-то вроде 'print item', он продолжает печатать последний элемент в списке02 .. – dissidia
что-то вроде этого' cmds.optionMenu ('filmbackMenu', edit = True, select = list02 [0]) '? ... я не знаком с майей, или вы хотите вернуть значение, когда пользователь нажимает кнопку – danidee
. Я делаю что-то простое, например 'cmds.button (label = 'Ok', command = ('print list02 [0]')) 'но на самом деле, я пытаюсь захватить/вернуть значение индекса на основе выбора. Пользовательский интерфейс будет функционировать - например. 'def ui()', в котором все выполнение будет занимать места в другой функции. – dissidia