部分,从textField获取一些数据

时间:2017-07-21 13:40:31

标签: python maya

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中的所有内容

2 个答案:

答案 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是在创建文本字段后定义的,所以它会在创建时捕获变量值。