猿问

具有返回变量函数 Maya Python 的 ScriptJob

我在使用 Maya 的 scriptJob 命令时遇到问题:如果我将 scriptJob 设置为不带参数的函数,一切正常,但如果我需要将变量传递给将由 scriptJob 执行的函数,则会返回此错误:


#Error: TypeError: file <maya console> line 5: Invalid arguments for flag 'ac'.  Expected ( string, string or function ), got [ str, NoneType ]#

代码非常简单,我只想了解为什么会这样。


import maya.cmds as cmds


def a():

    cube = "pCube1"

    cmds.scriptJob(ac = ["pCube2.translateY", delete(cube)])

    return cube


def delete(cube):

    cmds.delete(cube)


cube = a()

a()

希望您能够帮助我。


千万里不及你
浏览 133回答 1
1回答

白衣染霜花

有 3 种方法可以将参数传递给回调函数。1:您可以使用partial. 这通常用于自定义接口事件,例如Qt传递参数,您可以在此处执行相同的概念:from functools import partialimport maya.cmds as cmdsdef delete_cube(cube):&nbsp; &nbsp; if cmds.objExists(cube):&nbsp; &nbsp; &nbsp; &nbsp; cmds.delete(cube)cube = "pCube1"cid = cmds.scriptJob(ac=["pCube2.translateY", partial(delete_cube, cube)])2:与第一种方法类似,另一种流行的方法是使用lambda. 唯一的好处是它是一个内置命令,不需要导入任何模块,但它的语法可能一目了然不太可读:import maya.cmds as cmdsdef delete_cube(cube):&nbsp; &nbsp; if cmds.objExists(cube):&nbsp; &nbsp; &nbsp; &nbsp; cmds.delete(cube)cube = "pCube1"cid = cmds.scriptJob(ac=["pCube2.translateY", lambda x=cube: delete_cube(x)])3:或者您可以将其作为字符串传递,但如果参数本身是字符串,则需要正确格式化参数,包括其引号:import maya.cmds as cmdsdef delete_cube(cube):&nbsp; &nbsp; if cmds.objExists(cube):&nbsp; &nbsp; &nbsp; &nbsp; 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)。
随时随地看视频慕课网APP

相关分类

Go
我要回答