【问题标题】:Python in Maya - Query checkbox valueMaya 中的 Python - 查询复选框值
【发布时间】:2013-10-06 14:46:12
【问题描述】:

我是 python 的超级新手,我有这个小业余时间项目正在进行。 我找不到以下问题的解决方案:

我设置了一个这样的 GUI:

flWin = mc.window(title="Foot Locker", wh=(210,85))
mc.columnLayout()
mc.text(label='Frame Range')
rangeField = mc.intFieldGrp(numberOfFields=2,value1=0, value2=0)
mc.rowColumnLayout(numberOfRows=2)
translateBox = mc.checkBox(label='Translation',value=True)
mc.button(label="Bake it!", w=60, command="Bake()")
rotateBox = mc.checkBox(label='Rotation',value=True)
mc.button(label='Key it!', w=60, command='Key()')
scaleBox = mc.checkBox(label='Scale')
mc.showWindow(flWin)

然后,在函数“Bake”内部 id 喜欢查询复选框以执行不同的操作,具体取决于选中的框...像这样:

    translateValue = mc.checkBox(translateBox, query=True)
    rotateValue = mc.checkBox(rotateBox, query=True)
    scaleValue = mc.checkBox(scaleBox, query=True)

    if scaleValue = True:          
        if rotateValue = True:     
            if translateValue = True:
                mc.parentConstraint ('LockCator', Selection, n='LockCatorConstraint')
                mc.scaleConstraint('LockCator', Selection, n='selectionScale')

            else:
               mc.parentConstraint ('LockCator', Selection, n='LockCatorConstraint', skipTranslate=True) 
               mc.scaleConstraint('LockCator', Selection, n='selectionScale')


bla bla bla... you get the trick...

当我尝试运行脚本时,我收到一条错误消息,指出if scaleValue = True: 行上的语法无效

我也试过用这个:

mc.attributeQuery(translateBox,value=True) 

但这给了我一个错误,说“值”是一个无效的标志……我不知道那是什么意思。

这里的一些帮助将不胜感激! 谢谢大家!

【问题讨论】:

  • 请注意,比较应该使用双等号“==”,而不是单等号“=”,后者是为赋值而保留的。这就是您在 if 语句中遇到语法错误的原因。

标签: python user-interface checkbox maya


【解决方案1】:

你已经接近了,查询标志只是告诉你想要获取数据的命令,而不是设置,无论你在做什么,都必须出现在同一个命令中,你只是缺少 v=True 标志对于领域。

translateValue = mc.checkBox(translateBox, query=True, value=True)
rotateValue = mc.checkBox(rotateBox, query=True, value=True)
scaleValue = mc.checkBox(scaleBox, query=True, value=True)

另外,如果你链接你的 if 命令,看到你的值只能是真或假,你可以简单地写 if (scaleValue): 这与写 if scaleValue == True: 相同

if (scaleValue):
    if (rotateValue):     
        if (translateValue):
            mc.parentConstraint ('LockCator', Selection, n='LockCatorConstraint')
            mc.scaleConstraint('LockCator', Selection, n='selectionScale')
        else:
            mc.parentConstraint ('LockCator', Selection, n='LockCatorConstraint', skipTranslate=True) 
            mc.scaleConstraint('LockCator', Selection, n='selectionScale')

更好的是,鉴于您对这些链执行基本相同的操作,我们可以简化此操作:

skipTrans = True if scaleValue and rotateValue and translateValue else False
mc.parentConstraint ('LockCator', Selection, n='LockCatorConstraint', skipTranslate=skipTrans) 
mc.scaleConstraint('LockCator', Selection, n='selectionScale')

上面的代码和这段代码上面的代码完全一样。

希望这会有所帮助,正如 @jonathon 也提供的那样,您编写 UI 的方式可能会变得非常混乱且难以阅读,一定要读入 QT Designer,这是一个很棒的程序。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您需要做的就是同时包含 queryvalue 标志,例如:

    import maya.cmds as mc
    
    flWin = mc.window(title="Foot Locker", wh=(210,85))
    mc.columnLayout()
    mc.text(label='Frame Range')
    rangeField = mc.intFieldGrp(numberOfFields=2,value1=0, value2=0)
    mc.rowColumnLayout(numberOfRows=2)
    translateBox = mc.checkBox(label='Translation',value=True)
    mc.button(label="Bake it!", w=60, command="Bake()")
    rotateBox = mc.checkBox(label='Rotation',value=True)
    mc.button(label='Key it!', w=60, command='Key()')
    scaleBox = mc.checkBox(label='Scale')
    mc.showWindow(flWin)
    
    print mc.checkBox(scaleBox, q=True, v=True)
    

    返回True

    查询 UI 元素时,您需要将命令置于查询模式,然后还提供要查询的值,在本例中为值。所以你不是同时拥有所有元素!

    我知道这种行为很奇怪,但是当您了解 MEL 及其等效命令的工作原理后,它就更有意义了。

    另外,如果我没记错的话,您现在可以在 Maya python 中使用 PySide(一个 python Qt 库),这对于以编程方式创建 ui 来说是一个更好的主意。如果您正在寻找一种更简单的方法来创建 Maya 用户界面,您还可以使用 Qt Designer 构建一个 .ui 文件,maya 可以在运行时加载该文件。

    例如从 ui 文件创建一个窗口:

    # first delete window if it already exists
    if (cmds.window('window_name', exists=True)):
        cmds.deleteUI('window_name')
    window = cmds.loadUI('my_window.ui'))
    cmds.showWindow(window)
    

    要查询 ui,只需确保在 Qt Designer 中为 ui 元素赋予唯一的名称,然后像您目前所做的那样查询它们。

    有关将 Qt Designer 与 Maya 结合使用的更多信息,请参阅此页面:

    http://www.creativecrash.com/maya/tutorials/scripting/mel/c/using-qt-designer-for-mel-interfaces

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 2012-11-25
      • 2013-01-03
      相关资源
      最近更新 更多