在 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。
在 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。