Python (Maya) 将标志作为变量传递

Python (Maya) pass flags as variables

我正在尝试 运行 一个命令,具体标志取决于我在 UI 中选择的选项。具体来说,这是针对 Maya 的,我正在尝试在选定对象上创建一个新属性。问题是,根据我要创建的属性类型,我会有不同的标志,而且我不确定如何将这些标志传递给命令本身。这是我遇到问题的相关代码

TYPENum= #gets value from Radio button group
if TYPENum==1:
    TYPE='at="enum", en="Off:On"'
elif TYPENum==2:
    TYPE='at="float", min=0, max=1'

cmds.addAttr(selectedObject, ln="AttrNameTextField", TYPE, k=True")

我希望 TYPE 能够插入 at 标志(属性类型)以及 en 标志(枚举名称)或最小和最大标志。不幸的是,它没有将变量识别为标志,并且 returns 出现 "SyntaxError: non-keyword arg after keyword arg" 错误。必须有一种方法来构建命令然后 运行 它,但是我已经很长时间没有编写任何 UI 项目,我正在画一个空白。

感谢您的宝贵时间。

PS:我还没有走那么远,但我怀疑 min/max 值不会被识别为整数。如果您有解决该问题的建议,这将有助于解决下一个潜在障碍。

将标志传递给 Maya 命令的标准方法是使用 python 的内置 **args 语法:

mesh_options = {'type':'mesh', 'long':True } 
meshes = cmds.ls(**mesh_options)

等同于

cmds.ls(long=True, type='mesh') 

如果你想要这样的东西

opts = {"ln":"AttrNameTextField","k":True}
if typenum == 1:
   opts["at"] = "enum"
   opts["en"] = "Off:On"
else:
   opts["at"] = "float"
   opts["min"] = 0
   opts["max"] = 1
cmds.addAttr(selectedObject, **opts)