在 Maya 的 Python 中,partial 强制第一个参数为 'False' 而不是其默认值

in Python in Maya, partial forces the first argrument to be 'False' instead of its default value

在 Autodesk Maya 中,当我的 UI 需要触发函数时,我使用 functools 部分函数。但是当函数的第一个参数有默认值时,partial 总是发送一个 False(或 0)值,覆盖默认值。除了第一个参数外,没有其他参数受到影响。

为什么会发生这种情况,我该如何解决?这里有一些示例代码可以更好地阐明它:

import maya.cmds as mc
from functools import partial

def MyFunction(X=5,Y=6):
    print("The first number should be 5, and it is "+str(X) +"\nThe second number should be 6 and it is "+str(Y))


def PartialProblemUI():
    ##remove the window if it exists
    if mc.window("PartialProblem_Window", ex=True): mc.deleteUI("PartialProblem_Window")
    ##start of the window UI
    mc.window("PartialProblem_Window", title="Partial Problem",w=120,h=65, tlb=True,s=False)   
    form=mc.formLayout()   

    c=mc.button("UI_Btn_PartialProblem",l="Partial Problem",c=partial(MyFunction),w=150,h=40)
    mc.formLayout(form,e=True,attachForm=[(c,"left",21),((c,"top",5))])
    
    ##show the window
    mc.showWindow("PartialProblem_Window")    
    
    ####force the window to be a certain size
    mc.window("PartialProblem_Window", e=True ,w=200,h=115)     

PartialProblemUI()

我得到的结果是:

The first number should be 5, and it is False The second number should be 6 and it is 6

问题是 mc.button() 函数的回调总是从按钮命令接收一些参数并且第一个参数被替换。您可以使用

解决它
def MyFunction(*args, X=5, Y=6):

作为函数调用。这会捕获所有正常参数并且不会触及关键字 agruments。