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