【问题标题】:Python (Maya) pass flags as variablesPython (Maya) 将标志作为变量传递
【发布时间】:2015-07-14 12:41:23
【问题描述】:

我正在尝试运行一个命令,具体标志取决于我在 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 标志(枚举名称)或 min 和 max 标志。不幸的是,它没有将变量识别为标志,并返回“语法错误:关键字 arg 后的非关键字 arg”错误。必须有一种方法来构建命令然后运行它,但是我已经有很长时间没有编写任何 UI 项目了,而且我正在画一个空白。

感谢您的宝贵时间。

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

【问题讨论】:

    标签: python maya


    【解决方案1】:

    将标志传递给 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)
    

    【讨论】:

    • 啊,所以使用字典而不是列表或字符串来定义标志,然后 ** 来调用它们。谢谢你。这也解决了我对整数的担忧。
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2014-09-30
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多