Python + Maya - 如何将浮点数更改为时间值
Python + Maya - How to change a float into a time value
所以我基本上是在尝试创建一个 textField
,用户可以在其中输入 startFrame
和 endFrame
,然后它会根据滑块中的值进行缩放。
所以,我有这个,为了 floatFields
。
cmds.text( label='Start Frame' )
startFrame = cmds.floatField()
cmds.text( label='End Frame' )
endFrame = cmds.floatField()
因此,据我了解,startFrame
和 endFrame
是浮点数,但我收到此错误...
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("..")
从您命名变量的方式和您收到的错误来看,我怀疑您没有以正确的方式访问控件的值。
startFrame
和 endFrame
不是浮点数。它们只是控件的名称。如果您在需要 time
(作为浮点数)的函数中使用它们,您将得到一个错误,因为您传递的这些变量只是作为字符串 (Unicode) 的名称,而不是传递控件的值。
在 Maya 中,当您创建控件时,创建它的 command/function returns 已创建控件的名称。例如。 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)
一定要查看文档:http://download.autodesk.com/us/maya/2010help/CommandsPython/floatField.html
所以我基本上是在尝试创建一个 textField
,用户可以在其中输入 startFrame
和 endFrame
,然后它会根据滑块中的值进行缩放。
所以,我有这个,为了 floatFields
。
cmds.text( label='Start Frame' )
startFrame = cmds.floatField()
cmds.text( label='End Frame' )
endFrame = cmds.floatField()
因此,据我了解,startFrame
和 endFrame
是浮点数,但我收到此错误...
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("..")
从您命名变量的方式和您收到的错误来看,我怀疑您没有以正确的方式访问控件的值。
startFrame
和 endFrame
不是浮点数。它们只是控件的名称。如果您在需要 time
(作为浮点数)的函数中使用它们,您将得到一个错误,因为您传递的这些变量只是作为字符串 (Unicode) 的名称,而不是传递控件的值。
在 Maya 中,当您创建控件时,创建它的 command/function returns 已创建控件的名称。例如。 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)
一定要查看文档:http://download.autodesk.com/us/maya/2010help/CommandsPython/floatField.html