Python + Maya - 如何将浮点数更改为时间值

Python + Maya - How to change a float into a time value

所以我基本上是在尝试创建一个 textField,用户可以在其中输入 startFrameendFrame,然后它会根据滑块中的值进行缩放。

所以,我有这个,为了 floatFields

cmds.text( label='Start Frame' ) 
startFrame = cmds.floatField()

cmds.text( label='End Frame' ) 
endFrame = cmds.floatField()

因此,据我了解,startFrameendFrame 是浮点数,但我收到此错误...

Error: TypeError: Invalid arguments for flag 'time'. Expected (time, [time]), got ( 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("..")

从您命名变量的方式和您收到的错误来看,我怀疑您没有以正确的方式访问控件的值。

startFrameendFrame 不是浮点数。它们只是控件的名称。如果您在需要 time(作为浮点数)的函数中使用它们,您将得到一个错误,因为您传递的这些变量只是作为字符串 (Unicode) 的名称,而不是传递控件的值。

在 Maya 中,当您创建控件时,创建它的 command/function returns 已创建控件的名称。例如。 u'floatField1'

为了访问 Maya 中控件的任何值或其他方面,您将使用控件创建方法本身并传递要查询的控件的名称,传递查询标志 query=True,然后传递您要查询的参数,例如 value=Truetext=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)

一定要查看文档:http://download.autodesk.com/us/maya/2010help/CommandsPython/floatField.html