将实例名称作为参数从多个 UI 控件传递到 Python-Maya 中的单个函数
Pass instance name as argument from several UI controls to a single function in Python-Maya
我正在为 Maya 在 python 中开发一个 UI,我正在尝试做一个函数,当 frameLayout 展开时执行一个动作,在这种情况下我有几个 "frameLayout" 个对象,我想使用一个函数 "fl_expand",而不是每个对象一个函数
def fl_expand(*args):
print args
with frameLayout("layout1", collapsable=True, expandCommand=fl_expand):
...
with frameLayout("layout2", collapsable=True, expandCommand=fl_expand):
...
但我不知道如何将实例名称作为参数传递给函数,我试过:
with frameLayout("layout1", collapsable=True, expandCommand=fl_expand("layout1")):
...
但是我当然会收到这个错误:
# Error: TypeError: file /usr/autodesk/maya2018/lib/python2.7/site-packages/pymel/internal/pmcmds.py line 134: Invalid arguments for flag 'ec'. Expected string or function, got NoneType #
目前,您有类似的东西:
def fl_expand(*args):
print(args)
def frameLayout(name, collapsable, expandCommand):
print("frameLayout: " + name)
expandCommand('foo')
frameLayout("layout1", collapsable=True, expandCommand=fl_expand)
你想要的是调用 fl_expand 函数,第一个参数已经填充了布局的名称。为此,您可以使用 partiel 函数。请参阅 functools.partial.
的文档
你可以试试:
import functools
frameLayout("layout1", collapsable=True, expandCommand=functools.partial(fl_expand, "layout1"))
当然,如果你有很多这样的电话,那可能会很费力。您还可以定义自己的 frameLayout 函数:
def myFrameLayout(name, collapsable, expandCommand):
cmd = functools.partial(fl_expand, name)
return frameLayout(name, collapsable, cmd)
myFrameLayout("layout2", collapsable=True, expandCommand=fl_expand)
我正在为 Maya 在 python 中开发一个 UI,我正在尝试做一个函数,当 frameLayout 展开时执行一个动作,在这种情况下我有几个 "frameLayout" 个对象,我想使用一个函数 "fl_expand",而不是每个对象一个函数
def fl_expand(*args):
print args
with frameLayout("layout1", collapsable=True, expandCommand=fl_expand):
...
with frameLayout("layout2", collapsable=True, expandCommand=fl_expand):
...
但我不知道如何将实例名称作为参数传递给函数,我试过:
with frameLayout("layout1", collapsable=True, expandCommand=fl_expand("layout1")):
...
但是我当然会收到这个错误:
# Error: TypeError: file /usr/autodesk/maya2018/lib/python2.7/site-packages/pymel/internal/pmcmds.py line 134: Invalid arguments for flag 'ec'. Expected string or function, got NoneType #
目前,您有类似的东西:
def fl_expand(*args):
print(args)
def frameLayout(name, collapsable, expandCommand):
print("frameLayout: " + name)
expandCommand('foo')
frameLayout("layout1", collapsable=True, expandCommand=fl_expand)
你想要的是调用 fl_expand 函数,第一个参数已经填充了布局的名称。为此,您可以使用 partiel 函数。请参阅 functools.partial.
的文档你可以试试:
import functools
frameLayout("layout1", collapsable=True, expandCommand=functools.partial(fl_expand, "layout1"))
当然,如果你有很多这样的电话,那可能会很费力。您还可以定义自己的 frameLayout 函数:
def myFrameLayout(name, collapsable, expandCommand):
cmd = functools.partial(fl_expand, name)
return frameLayout(name, collapsable, cmd)
myFrameLayout("layout2", collapsable=True, expandCommand=fl_expand)