函数只使用一个参数返回

2024-04-16 09:44:58 发布

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

我的combine函数似乎只使用了我要用作参数的三个返回值中的一个。我收到以下错误消息

错误:combine\u lists()正好接受3个参数(给定1个)

我如何解决这个问题?你知道吗

删除对ikw和ikpv的引用可以避免出现错误。它认为我可以以这种方式使用不同函数的多个返回,但也许不行?你知道吗

我的按钮代码:

cmds.button(label='IK 2 FK',  command = combine_lists, width=100)

def select_joints_afk():
    Fks = []
    del Fks[:] 
    if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
        sel = cmds.ls(sl=True)
        fkCtrls = cmds.listRelatives(sel, allDescendents=True, type=("transform",'nurbsCurve'))
        Fks = [nurbsCurve for nurbsCurve in fkCtrls if nurbsCurve.startswith('FK') & nurbsCurve.endswith('Ctrl')]
        cmds.textFieldButtonGrp(gtF0, edit = True, tx ='' .join(sel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
        del Fks[1]
        del Fks[2]
        Fks.extend(sel)

        print Fks[0]
        print Fks[1]
        print Fks[2]
        return Fks 
    else:
        text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok', dismissString='No' )


def select_joints_aikw():
    ikw = []
    del ikw[:]
    if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
        ikwrist=cmds.ls(selection = True)
        ikw = [nurbsCurve for nurbsCurve in ikwrist if nurbsCurve.startswith('IK') & nurbsCurve.endswith('Ctrl')]
        cmds.textFieldButtonGrp(gtF1, edit = True, tx ='' .join(ikwrist),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
        print ikw
        return ikw
    else:
        text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok', dismissString='No' )

def select_joints_ikpv():
    ikpv = []
    del ikpv[:]
    if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
        ikPvsel = cmds.ls(selection = True)
        ikpv = [nurbsCurve for nurbsCurve in ikPvsel if nurbsCurve.startswith('IK') & nurbsCurve.endswith('Ctrl')]
        cmds.textFieldButtonGrp(gtF2, edit = True, tx ='' .join(ikPvsel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))        
        print ikpv
        return ikpv
    else:
        text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok', dismissString='No' )

def combine_lists(Fks,ikw,ikpv):


    Fks =  select_joints_afk()

    ikw = select_joints_aikw()

    ikpv = select_joints_ikpv()


    print Fks+ikw+ikpv

Tags: trueifokselectlsikprintdel
2条回答

将调用包装为将列表组合到functools.partial

arg1 = 1
arg2 = 2
arg3 = 3
tfunc = functools.partial(combine_lists, arg1, arg2, arg3)
cmds.button(label='IK 2 FK',  command=tfunc, width=100)

另外,我认为你可以在这里使用lambdas,但我现在不能测试它,所以不能确定。你知道吗

你有

def combine_lists(Fks,ikw,ikpv)

这意味着无论何时调用combine\u lists(),都需要传递三个参数。。i、 e.合并\u列表(x,y,z)。看起来你只是在用combine\u列表来计算这三件事,而不是试图传递任何东西。。所以只要做:

def combine_lists():


   Fks =  select_joints_afk()

   ikw = select_joints_aikw()

   ikpv = select_joints_ikpv()


   print Fks+ikw+ikpv

相关问题 更多 >