Maya Python + 按钮点击传递变量
我写了一个用于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'))