maya python+;按下按钮时传递变量

maya python+;按下按钮时传递变量,python,maya,Python,Maya,我有一个用python为maya编写的脚本,有3个标记为X Y Z的按钮。根据按下的按钮,我需要一个变量将特定值传递给函数。我该怎么做??我已经在按钮的评论中写下了我试图传递的内容。它似乎只是打印“假”我不知道为什么 import maya.cmds as cmds class createMyLayoutCls(object): def __init__(self): pass def show(self): self.createMyLay

我有一个用python为maya编写的脚本,有3个标记为X Y Z的按钮。根据按下的按钮,我需要一个变量将特定值传递给函数。我该怎么做??我已经在按钮的评论中写下了我试图传递的内容。它似乎只是打印“假”我不知道为什么

import maya.cmds as cmds

class createMyLayoutCls(object):
    def __init__(self):
        pass

    def show(self):
        self.createMyLayout()

    def createMyLayout(self):

        #check to see if our window exists
        if cmds.window('utility', exists = True):
            cmds.deleteUI('utility')

        # create our window
        self.window = cmds.window('utility', widthHeight = (200, 200), title = 'Distribute', resizeToFitChildren=1, sizeable = False)

        cmds.setParent(menu=True)

        # create a main layout
        mainLayout = cmds.gridLayout( numberOfColumns=3, cellWidthHeight=(70, 50) )

        # X Y Z BUTTONS
        btnAlignX = cmds.button(label = 'X', width = 40, height = 40, c = self.TakeAction) # should pass 'axis='X"
        btnAlignY = cmds.button(label = 'Y', width = 40, height = 40, c = self.TakeAction) # should pass 'axis='Y"
        btnAlignZ = cmds.button(label = 'Z', width = 40, height = 40, c = self.TakeAction) # should pass 'axis='Z"

        # show window
        cmds.showWindow(self.window)

    def TakeAction(self, axis=''):
        print axis

        if axis == 'x':
            print 'you selected x'
        if axis == 'y':
            print 'you selected y'
        if axis == 'y':
            print 'you selected z'   

b_cls = createMyLayoutCls()  
b_cls.show()

使用
lambda
为每个按钮命令提供自己的小功能:

btnAlignX = cmds.button(label='X', c=lambda *_:self.TakeAction('X'))
btnAlignY = cmds.button(label='Y', c=lambda *_:self.TakeAction('Y'))
btnAlignZ = cmds.button(label='Z', c=lambda *_:self.TakeAction('Z'))

使用
lambda
为每个按钮命令提供自己的小功能:

btnAlignX = cmds.button(label='X', c=lambda *_:self.TakeAction('X'))
btnAlignY = cmds.button(label='Y', c=lambda *_:self.TakeAction('Y'))
btnAlignZ = cmds.button(label='Z', c=lambda *_:self.TakeAction('Z'))

要替换lambda,可以使用partial:

from functools import partial

btnAlignX = cmds.button(label='X', c=partial(self.TakeAction, 'X'))
lambda和partial都应该工作


希望有帮助。

要替换lambda,您可以使用部分:

from functools import partial

btnAlignX = cmds.button(label='X', c=partial(self.TakeAction, 'X'))
lambda和partial都应该工作


希望能有所帮助。

我将其改为此,它的错误是说#Error:()不接受任何参数(给定1个参数)#。。。。。btnAlignX=cmds.button(label='X',c=lambda:self.TakeAction(axis='X'))啊,是的,我忘了Maya添加了一个参数。添加了
*.
以接受和忽略传递给lambda函数的任何参数,我将其更改为此,并显示以下错误:#错误:()不接受任何参数(给定1)#。。。。。btnAlignX=cmds.button(label='X',c=lambda:self.TakeAction(axis='X'))啊,是的,我忘了Maya添加了一个参数。添加了
*.
以接受和忽略传递给lambda函数的任何参数