1 回答
TA贡献1796条经验 获得超10个赞
有 3 种方法可以将参数传递给回调函数。
1:
您可以使用partial. 这通常用于自定义接口事件,例如Qt传递参数,您可以在此处执行相同的概念:
from functools import partial
import maya.cmds as cmds
def delete_cube(cube):
if cmds.objExists(cube):
cmds.delete(cube)
cube = "pCube1"
cid = cmds.scriptJob(ac=["pCube2.translateY", partial(delete_cube, cube)])
2:
与第一种方法类似,另一种流行的方法是使用lambda. 唯一的好处是它是一个内置命令,不需要导入任何模块,但它的语法可能一目了然不太可读:
import maya.cmds as cmds
def delete_cube(cube):
if cmds.objExists(cube):
cmds.delete(cube)
cube = "pCube1"
cid = cmds.scriptJob(ac=["pCube2.translateY", lambda x=cube: delete_cube(x)])
3:
或者您可以将其作为字符串传递,但如果参数本身是字符串,则需要正确格式化参数,包括其引号:
import maya.cmds as cmds
def delete_cube(cube):
if cmds.objExists(cube):
cmds.delete(cube)
cube = "pCube1"
cid = cmds.scriptJob(ac=["pCube2.translateY", "delete_cube('{}')".format(cube)])
您不一定必须使用,您可以使用or.format连接字符串。就我个人而言,我更喜欢第一种方法,因为它感觉更干净,更省事。+%partial
一些结束语:
在您的回调函数中,您应该包含一个条件检查,
cmds.objExists
以确保您要删除的内容确实存在,否则它将引发错误。不要忘记将结果捕获到
cmds.scriptJob
一个变量中,以便您以后可以轻松地删除它cmds.scriptJob(kill=cid)
。
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报