Maya python获取和使用复选框的结果



我有一个脚本,要求用户使用复选框选择一个对称轴。然后我希望在另一个函数中使用该结果来创建镜像工具。到目前为止,当我尝试查询复选框时,我一直得到以下错误:

RuntimeError: file line 81: Object xAxisBox not found

我是初学者,所以我很抱歉,如果这是显而易见的,但我错在哪里?
相关代码如下:

    xAxisBox = cmds.checkBox(l="x")
    yAxisBox = cmds.checkBox(l="y")
    zAxisBox = cmds.checkBox(l="z")
    btAxis=cmds.button( label = "Do the thing!", command = "Blendy();")
    def Blendy ():
    xCheck = cmds.checkBox('xAxisBox', query=True, value = True)
    yCheck = cmds.checkBox('yAxisBox', query=True, value = True)
    zCheck = cmds.checkBox('zAxisBox', query=True, value = True)
    print xCheck
    print yCheck
    print zCheck

我没有玛雅,所以我不能为你测试这个,但看看另一个问题的答案,看起来你需要使用实际的python变量没有引号(即xAxisBox而不是'xAxisBox'),像这样:

xCheck = cmds.checkBox(xAxisBox, query=True, value = True)

如果您使用cmd,您可以引用硬编码的ui名称:

xAxisBox = cmds.checkBox("xAxisBox", l="x")
yAxisBox = cmds.checkBox("yAxisBox", l="y")
zAxisBox = cmds.checkBox("zAxisBox", l="z")
btAxis = cmds.button(label="Do the thing!", command=Blendy)
def Blendy ():
    xCheck = cmds.checkBox('xAxisBox', query=True, value=True)
    yCheck = cmds.checkBox('yAxisBox', query=True, value=True)
    zCheck = cmds.checkBox('zAxisBox', query=True, value=True)
    print xCheck
    print yCheck
    print zCheck

但是使用pymel,您可以尝试不硬编码:

xAxisBox = pm.checkBox(l="x")
yAxisBox = pm.checkBox(l="y")
zAxisBox = pm.checkBox(l="z")
btAxis = pm.button(
    label="Do the thing!",
    command=pm.Callback(Blendy, 
                        xAxis, yAxis, zAxis)
    )
def Blendy (xbox, ybox, zbox):
    xCheck = cmds.checkBox(str(xbox), query=True, value=True)
    yCheck = cmds.checkBox(str(ybox), query=True, value=True)
    zCheck = cmds.checkBox(str(zbox), query=True, value=True)
    print xCheck
    print yCheck
    print zCheck

可以导入pymel import pymel.core as pm

但如果你要使用pymel,我建议重写Blendy函数,如:

def Blendy(xbox, ybox, zbox):
    print xbox.getValue(), ybox.getValue(), zbox.getValue()

最后,同样重要的是,你可以使用类来存储值

和neelz的答案来自其他资源:使用模块partial的方案类似于Callback:

from functools import partial
cmds.checkBox(onCommand=partial(func_without_parenthesizes, arg, arg))

最新更新