我一直在从梅尔转过来,想知道是否有人可以给我指出正确的方向。 我不太确定如何运行带有特定参数的函数。
def testFUNCTION(field):
if field == 'option1': print 'You have selected option 1'
else: print 'You have selected option 2'
mc.window( w=150 )
mc.textFieldButtonGrp (l='option 1', bl='Set', ad3=2, bc=('testFUNCTION, option1'))
mc.textFieldButtonGrp (l='option 2', bl='Set', ad3=2, bc=('testFUNCTION, option2'))
mc.showWindow()
我不断得到:
line 1: name 'option1' is not defined
任何建议都会很棒! 谢谢
最佳答案
当您传递时,您正在尝试从字符串创建回调
mc.textFieldButtonGrp (l='option 1', bl='Set', ad3=2, bc=('testFUNCTION, option1')
当 Maya 计算字符串时,“option1”未加引号,因此 Python 认为它是变量名称。
一般来说,您不想使用字符串格式进行回调,正是因为这个原因:确定变量的定义位置会出现问题。
通常的解决方法是使用 functools 模块或 lambda 来创建回调,该回调包含创建时所需的所有信息。例如:
def testFUNCTION(field):
if field == 'option1': print 'You have selected option 1'
else: print 'You have selected option 2'
window = mc.window( w=150 )
mc.columnLayout()
mc.textFieldButtonGrp (l='option 1', bl='Set', ad3=2, bc=(lambda : testFunction('option1'))
mc.textFieldButtonGrp (l='option 2', bl='Set', ad3=2, bc=(lambda : testFunction('option2'))
mc.showWindow(window)
这里有关于如何轻松设置回调的更详细说明 here 。
PS:注意添加了columnLayout命令。如果没有它,您的控件将彼此叠放
关于python - 如何在 Maya 中使用 Def Function 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021598/