Имел шанс сделать небольшой немного исследований на этом сегодня, но я на самом деле не использовать Maya Python, так что это не может быть жизнеспособным код - по крайней мере, это должно быть близко!
def walk(*args):
print ("walking")
def run(*args)
print ("running")
def cheer(*args)
print ("cheer")
fncdict = {"Walking":walk,"Running":run,"Cheering":cheer}
def dofunc(funcname):
try: fncdict[funcname]()
except KeyError: print("adsmith doesn't really know how this crap works,
and gave you some really shoddy advice. Go downvote
his answer.")
Type = cmds.optionMenu('type',w = 300 ,label = 'Type of crowd:')
# Please don't name things this way! naming conventions in PEP 8
# make this look like a class not an instance of optionMenu
cmds.menuItem(label='Walking', parent = Type)
cmds.menuItem(label='Running', parent = Type)
cmds.menuItem(label='Cheering', parent = Type)
cmds.button('Build',command = lambda x: dofunc(Type.value))
# I'm assuming this is the button you want to use to say "GO", right?
От мало я читал, это выглядит как optionMenu.value
относится к тексту в активном menuItem
, но я не могу сказать наверняка, - это может быть просто текст для этого optionMenu
в этом случае кнопка вызовет dofunc('Type of crowd:')
, которая вернет исключение, которое я создал, чтобы позорить себя.
Вот альтернатива, которую я ЗНАЮ, будет работать, но это уродливо и не нужно.
# all
# those
# functions
# go
# here
# including
# the dict and dofunc
activeMenuItem = None
Type = cmds.optionMenu('type',w = 300 ,label = 'Type of crowd:',
changeCommand = lambda x: activeMenuItem = x)
# this fails because you can't do assignments in a lambda -- OOPS!!
cmds.menuItem(label='Walking', parent = Type)
cmds.menuItem(label='Running', parent = Type)
cmds.menuItem(label='Cheering', parent = Type)
cmds.button('Build',command = lambda x: dofunc(activeMenuItem))
changeCommand
вариант в optionMenu
вызывается каждый раз, когда вы изменяете элементы. Я назначил его lambda
, который обновляет переменную activeMenuItem
до значения в новом активном menuItem
, после чего кнопка ссылается на переменную вместо запроса optionMenu
для выбранной в данный момент кнопки, но давайте будем честными - это то, что меню сделаны. Существует ОПРЕДЕЛЕННО способ сделать это, не сохраняя каждый отдельный выбор.
РЕДАКТИРОВАТЬ: ЭТО ПОСЛЕДНЕЕ НЕ БУДЕТ РАБОТАТЬ, ЧТО ВЫ НЕ МОЖЕТЕ СДЕЛАТЬ ЗАПИСИ В РАМКАХ ВЫПОЛНЕНИЯ ЛАМБЫ. МОЯ ВИНА!
Я на самом деле не знаю, как осуществить это, но вы должны найти способ, чтобы вытащить 'label 'из выбранного' menuItem', постройте идентификатор этих меток (например, 'funcdict = {« Ходьба »: прогулка« Бег »: бегите,« Cheering »: cheer}') и делайте 'funcdict [sel_menu_item] (* args)'. В качестве примечания я переименовал вашу функцию 'chr' в' cheer' - это ключевое слово. –
Спасибо за быстрый ответ попробуем его и сообщим вам, как это происходит! – Arnvfx