列表中的第一项,用Python术语 - 索引通常从0开始,但是在这个filmbackMenu的Maya术语中,它从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'并将名称和索引附加到list02中,但我只知道如何处理名称或索引,但我相信我需要两者。这是我的代码部分:
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? 索引不需要在UI中显示,名称也会这样做,我仍然需要最终获取索引值...
请在下面查看我的代码,或许可以提供更好的见解,如果需要,请随时批评。
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 )
在我的UI中发生的是,在用户选择时,例如。如果我选择了索引为4的itemD-01,则应运行以下代码:
cmds.optionMenu('filmbackMenu', edit = True, select = 4)
请注意,select的标志将被更改..
答案 0 :(得分:1)
您不需要在列表枚举中添加虚拟元素,而第二个参数指示它应该从哪个位置开始。使用此方法,您可以将索引和项目并排存储在单独的列表中
list02 = []
list01 = ['itemA-01', 'itemB-02', 'itemC-02', 'itemD-01', 'itemE-01', 'itemF-03']
for index, item in enumerate(list01, 1):
if '-01' in item:
list02.append([index, item])
print(list02)
结果
[[1, 'itemA-01'], [4, 'itemD-01'], [5, 'itemE-01']]
您甚至可以将其转变为优雅的列表理解
result = [[index, item] for index, item in enumerate(list01, 1) if '-01' in item]