部分,从 textField 获取一些数据

partial, getting some data from textField

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) #

所以我是 partial 的新手,我不明白他们做什么以及他们是如何工作的。但我知道可以用 partial 做我想做的事。所以只需打印出我在 textField

中的任何内容

这里有一些应该适合你的东西:

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

在这种情况下,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 是在创建文本字段后定义的,它会在创建时捕获变量值。