如何使用intField将值设置为变量

2024-10-01 11:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在介绍我是python的新手之后,我尝试使用intField命令为这个属性设置多次迭代:“aiSubdivIterations”。在

脚本应该是这样工作的:当我运行脚本时,它会打开一个窗口,我可以在其中设置我的值,当我按enter键时,它应该会在“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()

有人能帮忙让这个剧本生效吗?在

提前谢谢

弗拉维亚


Tags: import命令脚本trueobj属性enter新手
1条回答
网友
1楼 · 发布于 2024-10-01 11:29:27

脚本最简单的工作方式是指定要调用的函数(不带参数,其余代码不变):

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

^{pr2}$

对于更复杂的场景,您可能需要考虑lambda functions(您可以阅读here一篇很好的文章);这将允许延迟对函数的求值。 下面是一个非常简单的示例,它在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

这是一篇由theodox撰写的关于Maya用户界面和回调的非常有用且详尽的文章,可以通过this;找到,值得一读。在

相关问题 更多 >