介绍我是python的新手,我想使用 intField 命令为这个属性设置一些迭代:'aiSubdivIterations'。
脚本应该这样工作:当我运行脚本时,它打开一个窗口,我可以在其中设置我的值,当我按下回车键时,它应该自动在'aiSubdivIterations'插槽中设置相同的值。
import maya.cmds as pm
def aiSetIter(iterValue):
objSelect= pm.ls(sl=1, dag=True, leaf=True)
for obj in objSelect:
pm.setAttr( obj + '.aiSubdivIterations', iterValue)
pm.window(title = 'Interations')
pm.columnLayout ('mainColumn', adjustableColumn = True)
pm.gridLayout ('nameGridLayout01', numberOfRowsColumns = (2,2), cellWidthHeight = (80,30), parent = 'mainColumn')
pm.text (label = 'number')
pm.intField (minValue=0, maxValue=10, step=1, vcc = 'aiSetIter(iterValue)')
pm.showWindow()
有人可以帮助使这个脚本有效吗?
提前致谢
Flavia的
答案 0 :(得分:0)
最简单的脚本工作方法是只指定要调用的函数(不带参数,其余代码保持不变):
pm.intField('valueField', minValue=0, maxValue=10, step=1, vcc=aiSetIter)
您可以假设Maya的intField将通过自动传递它存储的值来调用指定的函数。 在上述情况下,您的功能将是called only when the UI is made visible or closed。
如果您需要在每次值更改时调用您的函数,您也想添加"changeCommand" (or "cc") flag:
pm.intField('valueField', minValue=0, maxValue=10, step=1, vcc=aiSetIter, cc=aiSetIter)
对于更复杂的场景,您可能需要考虑 lambda函数(您可以阅读here一篇关于它的好文章);这将允许延迟评估您的功能。 下面是 lambda函数的一个超级简单示例,它检索intField值更改并将其与值本身一起传递给 myLambdaFunc 时的当前时间:
import maya.cmds as pm
import time
def myLambdaFunc(iterValue, now):
print iterValue, now
lambdafunc = lambda arg: myLambdaFunc(arg, time.time())
pm.window(title='Iterations')
pm.columnLayout ('mainColumn', adjustableColumn=True)
pm.gridLayout ('nameGridLayout01', numberOfRowsColumns=(2,2), cellWidthHeight=(80,30), parent='mainColumn')
pm.text (label='number')
pm.intField('valueField', minValue=0, maxValue=10, step=1, vcc=lambdafunc, cc=lambdafunc)
pm.showWindow(win)
编辑:
一个小小的整合,因为我刚才碰到了这个: https://theodox.github.io/2014/maya_callbacks_cheat_sheet