因此,我基本上尝试创建textField
,其中用户在startFrame
和endFrame
中输入内容,并按照滑块中的值进行缩放。
所以,对于floatFields
,我有这个。
cmds.text( label='Start Frame' )
startFrame = cmds.floatField()
cmds.text( label='End Frame' )
endFrame = cmds.floatField()
所以,根据我的理解,startFrame
和endFrame
是花车,但我收到此错误...
错误:TypeError:flag' time'的参数无效。预期(时间, [时间]),得到(unicode,unicode)
他们为什么要unicode?如何将它们更改为时间变量?我环顾四周,但我是Maya + Python的新手,我有点困惑。
感谢。
编辑:这是完整的代码段。
def scaleAnimation():
cmds.scaleKey( time=(startFrame,endFrame), timeScale=keyFrameScale, timePivot=0 )
cmds.frameLayout(collapsable=True, label = "Scale Keyframes", width = 475)
#get scale for the keyframes
keyFrameScale = cmds.floatSliderGrp(label='Keyframe Scale',field=True,minValue=0.0,maxValue=2.0,value=0.5)
cmds.text( label='Start Frame' )
startFrame = cmds.floatField()
cmds.text( label='End Frame' )
endFrame = cmds.floatField()
cmds.button(label='Scale Keyframes',command='scaleAnimation()')
cmds.setParent("..")
答案 0 :(得分:1)
从你命名变量的方式和你得到的错误中,我怀疑你没有以正确的方式访问控件的值。
startFrame
和endFrame
不是花车。它们只是控件的名称。如果在期望time
的函数中使用这些(作为float),则会出现错误,因为您传递的这些变量只是名称为字符串(Unicode)而不是传递控件的值。
在Maya中,当您创建控件时,创建它的命令/函数将返回所创建控件的NAME。 EGS。 u'floatField1'
为了访问Maya中控件的任何值或其他方面,您将使用控件创建方法本身并传递要查询的控件的名称,传递查询标志query=True
然后传递您要查询的参数,例如value=True
或text=True
。
在您的情况下,您的方式是:
# First make the controls. Note the clearer variable names
cmds.text( label='Start Frame' )
startFrame_control = cmds.floatField()
cmds.text( label='End Frame' )
endFrame_control = cmds.floatField()
# this is how you should access the values
startFrame = cmds.floatField(startFrame_control, query=True, value=True)
endFrame = cmds.floatField(endFrame_control, query=True, value=True)
# NOW these are float values as you would expect.
# You could use them as time parameters in any function that expects time params.
print "The start frame is:", startFrame
print "The end frame is:", endFrame
cmds.scaleKey( time=(startFrame,endFrame), timeScale=keyFrameScale, timePivot=0)
请务必查看文档:{{3}}