1 回答

TA貢獻1796條經(jīng)驗 獲得超10個贊
有 3 種方法可以將參數(shù)傳遞給回調函數(shù)。
1:
您可以使用partial. 這通常用于自定義接口事件,例如Qt傳遞參數(shù),您可以在此處執(zhí)行相同的概念:
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:
或者您可以將其作為字符串傳遞,但如果參數(shù)本身是字符串,則需要正確格式化參數(shù),包括其引號:
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
一些結束語:
在您的回調函數(shù)中,您應該包含一個條件檢查,
cmds.objExists
以確保您要刪除的內容確實存在,否則它將引發(fā)錯誤。不要忘記將結果捕獲到
cmds.scriptJob
一個變量中,以便您以后可以輕松地刪除它cmds.scriptJob(kill=cid)
。
- 1 回答
- 0 關注
- 167 瀏覽
添加回答
舉報