Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maya中的Python-查询复选框值_Python_User Interface_Checkbox_Maya - Fatal编程技术网

Maya中的Python-查询复选框值

Maya中的Python-查询复选框值,python,user-interface,checkbox,maya,Python,User Interface,Checkbox,Maya,我是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(numberOfRow

我是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)
    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...
然后,在函数“Bake”中 我想查询复选框来做不同的事情,这取决于选中的框。。。像这样:

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)
    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...
当我尝试运行脚本时,我得到一个错误,即如果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')
我也试着用这个:

mc.attributeQuery(translateBox,value=True) 
但这给了我一个错误,说“value”是无效的标志。。。我不知道那是什么意思

如果您能在此提供帮助,我们将不胜感激!!
谢谢大家

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

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 ui,还可以使用Qt Designer构建maya可以在运行时加载的
.ui
文件

例如,要从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元素指定唯一的名称,然后像到目前为止一样查询它们

有关在maya中使用Qt Designer的详细信息,请参见此页面:


如果您很接近,查询标志只是告诉您想要获取数据的命令,而不是设置,无论您想做什么,都必须出现在同一个命令中,您只是缺少字段的
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命令的地方,由于您的值只能是true或false,您可以简单地编写
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绝对可以理解,这是一个出色的程序。

请注意,应该使用双等号“==”,而不是单等号“=”,这是保留给赋值的。这就是为什么在
if
语句中出现语法错误的原因。