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