我一直在改变梅尔,并且想知道是否有人能指出我正确的方向。 我不太确定如何运行具有特定arg的函数。
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
任何建议都会很棒! 感谢
答案 0 :(得分:2)
您尝试在传递
时从字符串创建回调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命令。如果没有它,你的控制将在彼此之上展开
答案 1 :(得分:2)
使用functools在maya UI中传递参数:
command = partial(defName,arg01,arg02)#您需要的任何参数
from functools import partial
def testFUNCTION(field, *args):
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=partial(testFUNCTION, 'option1'))
mc.textFieldButtonGrp (l='option 2', bl='Set', ad3=2, bc=partial(testFUNCTION, 'option2'))
mc.showWindow()
答案 2 :(得分:0)
乍一看,我相信你的问题是你的bc(buttonCommand)标志需要是一个函数。对于一个班轮函数,您可以使用lambda。
mc.textFieldButtonGrp (l='option 1', bl='Set', ad3=2, bc=lambda x='option1': testFUNCTION(x))
然而,总的来说,我建议一起重新评估所有并远离maya cmds并使用pymel。
也许这样的事情可以满足你的需求。
results = pm.confirmDialog(title='Title', message='Here is an example', button=['option1', 'option2'])
testFUNCTION(result)
如果您需要更强大的GUI,请考虑尝试使用PySide。