import maya.cmds as cmds
from functools import partial
def export(txtField):
print "hello"
#print cmds.textField( txtField, q=1 )
if cmds.window( 'exporter', q=1, ex=1 ):
cmds.deleteUI( 'exporter' )
window = cmds.window( 'exporter' )
cmds.columnLayout( adjustableColumn=True )
name = cmds.textField( text='testing...' )
press = cmds.button( 'Export...', c=partial( export, name) )
cmds.showWindow( 'exporter' )
所以我得到错误:
# Error: export() takes exactly 1 argument (2 given) #
所以我是新来的部分,我不明白他们做了什么以及他们如何工作。但我知道我可以做部分的事情。所以只需打印出textField中的所有内容
答案 0 :(得分:1)
这里应该适合你:
from maya import cmds
from functools import partial
def export(txtField, *args):
print txtField, ':', args
print cmds.textField(txtField, q=1, text=1)
if cmds.window('exporter', q=1, ex=1):
cmds.deleteUI('exporter')
window = cmds.window('exporter')
cmds.columnLayout(adjustableColumn=True)
name = cmds.textField(text='testing...')
press = cmds.button('Export...', c=partial(export, name))
cmds.showWindow('exporter')
正在发生的事情(并且可能令人困惑)是Maya的按钮调用的命令默认情况下已传递参数,在本例中为False
。因此,partial
将额外参数附加到您指定的参数,因此export
应该接收两个参数,而不仅仅是一个参数。
很长一段时间我不使用本机Maya UI命令,因此我不确定False
代表什么,以及在不同条件下是否可以期望传递任何有意义的参数。
无论如何,你可以通过在函数定义中添加一个额外的参数来解决这个问题。
您可以编写类似def export(txtField, _):
的内容,但只有在您确定传递的参数是一个且只有一个时才能使用。出于这个原因,我改为使用def export(txtField, *args):
。通过这种方式,您可以打印args
并对正在传递的内容进行故障排除(无论参数的数量),同时让其余代码正常工作。
作为旁注,对于partial
与Maya的其他用法,您可能需要阅读以下内容:
https://theodox.github.io/2014/maya_callbacks_cheat_sheet
答案 1 :(得分:1)
在这种情况下,partial
可能有点矫枉过正。 @ mapofemergence的答案会很好,但你可以这样做:
from maya import cmds
if cmds.window('exporter', q=1, ex=1):
cmds.deleteUI('exporter')
window = cmds.window('exporter')
cmds.columnLayout(adjustableColumn=True)
tf = cmds.textField(text='testing...')
def export(*_):
print "textfield says" , cmds.textField(tf, q=1, text=1)
press = cmds.button('Export...', c=export)
cmds.showWindow('exporter')
因为export
是在创建文本字段后定义的,所以它会在创建时捕获变量值。