Maya Python + 按钮点击传递变量

0 投票
2 回答
4305 浏览
提问于 2025-04-18 01:14

我写了一个用于Maya的Python脚本,里面有三个按钮,分别标记为X、Y和Z。根据按下哪个按钮,我想让一个变量传递一个特定的值给一个函数。我该怎么做呢?我在按钮的注释中写了我想传递的内容。结果似乎只打印出'false',我不太明白为什么。

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()

2 个回答

3

要替代lambda表达式,你可以使用partial这个方法:

from functools import partial

btnAlignX = cmds.button(label='X', c=partial(self.TakeAction, 'X'))

lambda和partial都可以正常使用。

希望这对你有帮助。

2

使用一个 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'))

撰写回答