我正在尝试运行一个命令,具体的标志取决于我在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标志(attrbute类型)以及ether en标志(枚举名称)或最小和最大标志。不幸的是,它没有将变量识别为标志,并返回“SyntaxError:关键字arg之后的非关键字arg”错误。必须有一种方法来构建命令然后运行它,但是由于我编写了任何UI项目已经有很长一段时间了,我正在画一个空白。
感谢您的时间。
PS:我还没有那么远,但我怀疑最小/最大值不会被识别为整数。如果你有解决这个问题的建议,那将有助于下一个潜在的障碍。
答案 0 :(得分:4)
将标志传递给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)