這個問題有三個部分。
首先,你希望你的選項是可以調用的。我喜歡爲functools.partial,這樣就可以給相同的命令不同的參數,並把它作爲被兩個不同的動作處理:
from functools import partial
bigcircle = functools.partial (cmds.circle, radius = 10)
littleCircle = functools.partial (cmds.circle, radius = 1)
第二個問題是,在OptionMenus的菜單項不直接解僱他們的命令。他們觸發擁有optionMenu的-cc更改命令。所以我們需要一些將標籤變回可調用對象的東西。一個小類將做:
class menuMgr(object):
'''call the function associated with a key in the **callables dictionary'''
def __init__(self, **callables):
self.Callables = callables
def __call__(self, *args):
self.Callables[args[-1]]()
第三部分是將這些與標籤匹配。您可以使用** kwargs語法,在那裏你可以通過在整個字典或關鍵字命名的優雅做這樣的:
def menu_of_functions(**callables):
mmgr = menuMgr(**callables)
Main = cmds.optionMenu('type3',w = 300 ,label = 'Type of crowd:', cc = mmgr)
for key, partial in callables.items():
cmds.menuItem(label = key)
cmds.setParent("..")
繼承人的工作形式整件事檢查:
import maya.cmds as cmds
import functools
bigCircle = functools.partial (cmds.circle, radius = 10)
littleCircle = functools.partial (cmds.circle, radius = 1)
class menuMgr(object):
def __init__(self, **callables):
self.Callables = callables
def __call__(self, *args):
self.Callables[args[-1]]()
def menu_of_functions(**callables):
mmgr = menuMgr(**callables)
Main = cmds.optionMenu('type3',w = 300 ,label = 'Type of crowd:', cc = mmgr)
for key, partial in callables.items():
cmds.menuItem(label = key)
cmds.setParent("..")
q = cmds.window()
cmds.columnLayout()
menu_of_functions(big = bigCircle, small = littleCircle)
cmds.showWindow(q)
我真的不知道如何實現這一點,但你應該找到一種方式來拉所選'menuItem'中的'label',構建這些標籤的詞典(例如'funcdict = {「散步」:散步,「跑步」:跑步,「歡呼」:歡呼}'),並做'funcdict [sel_menu_item](* args)'。作爲一個附註,我將'chr'函數重命名爲'cheer'--它是一個關鍵字。 –
感謝您的快速回復將嘗試它,讓你知道它是怎麼回事! – Arnvfx