Maya Python:在交互式创建的按钮上调用命令
Maya Python: Calling a command on interactively created buttons
我正在尝试编写一个小脚本,根据场景中存在的 nCloth 节点数量,在 UI 上创建 'n' 个按钮,以便用户能够 select 节点通过按下相应的按钮(为了测试我现在只需要它们 select 节点)。这是我到目前为止得到的:
import maya.cmds as cmds
def fillTemp(*args):
theElements = cmds.rowColumnLayout ('listColumn', query=True, childArray=True)
if theElements > 0:
for element in theElements:
cmds.deleteUI (element)
objectList = cmds.ls(type='nCloth')
for item in objectList:
cmds.setParent ('listColumn')
cmds.text ((item+'labelText'), label=item, align='left',width= 220)
cmds.button ((item+'_select'), label='Select', width= 50)
if (cmds.window('testWin', exists=True)):
cmds.deleteUI('testWin')
theWindow = cmds.window('testWin', title='Test Window', widthHeight=(270, 390), sizeable=True)
cmds.columnLayout ('mainColumn', adjustableColumn=False)
cmds.button ('FillList', label= "nCloth in Scene", width= 270, command= fillTemp)
cmds.scrollLayout ('nClothScrollList', w=270 , h=150, backgroundColor=(.15,.15,.15) )
cmds.rowColumnLayout ('listColumn', numberOfColumns=2, columnWidth=[(1, 220), (2, 50)])
cmds.setParent('..')
cmds.showWindow (theWindow)
到目前为止,我已经能够使用节点名称和 select 它们的按钮填充 RowColumnLayout。但是,我不确定如何让这些按钮起作用。 . 任何提示或想法将不胜感激。
我没有测试这段代码,但它应该可以工作。您需要使用 lambda 或 partial,我更喜欢 partial。
import maya.cmds as cmds
from functools import partial
def fillTemp(*args):
theElements = cmds.rowColumnLayout ('listColumn', query=True, childArray=True)
if theElements > 0:
for element in theElements:
cmds.deleteUI (element)
objectList = cmds.ls(type='nCloth')
for item in objectList:
cmds.setParent ('listColumn')
cmds.text ((item+'labelText'), label=item, align='left',width= 220)
cmds.button ((item+'_select'), label='Select', width= 50, command=partial(selectNode, item))
def selectNode(node, *args):
cmds.select(cl=True)
cmds.select(node)
if (cmds.window('testWin', exists=True)):
cmds.deleteUI('testWin')
theWindow = cmds.window('testWin', title='Test Window', widthHeight=(270, 390), sizeable=True)
cmds.columnLayout ('mainColumn', adjustableColumn=False)
cmds.button ('FillList', label= "nCloth in Scene", width= 270, command= fillTemp)
cmds.scrollLayout ('nClothScrollList', w=270 , h=150, backgroundColor=(.15,.15,.15) )
cmds.rowColumnLayout ('listColumn', numberOfColumns=2, columnWidth=[(1, 220), (2, 50)])
cmds.setParent('..')
cmds.showWindow (theWindow)
我正在尝试编写一个小脚本,根据场景中存在的 nCloth 节点数量,在 UI 上创建 'n' 个按钮,以便用户能够 select 节点通过按下相应的按钮(为了测试我现在只需要它们 select 节点)。这是我到目前为止得到的:
import maya.cmds as cmds
def fillTemp(*args):
theElements = cmds.rowColumnLayout ('listColumn', query=True, childArray=True)
if theElements > 0:
for element in theElements:
cmds.deleteUI (element)
objectList = cmds.ls(type='nCloth')
for item in objectList:
cmds.setParent ('listColumn')
cmds.text ((item+'labelText'), label=item, align='left',width= 220)
cmds.button ((item+'_select'), label='Select', width= 50)
if (cmds.window('testWin', exists=True)):
cmds.deleteUI('testWin')
theWindow = cmds.window('testWin', title='Test Window', widthHeight=(270, 390), sizeable=True)
cmds.columnLayout ('mainColumn', adjustableColumn=False)
cmds.button ('FillList', label= "nCloth in Scene", width= 270, command= fillTemp)
cmds.scrollLayout ('nClothScrollList', w=270 , h=150, backgroundColor=(.15,.15,.15) )
cmds.rowColumnLayout ('listColumn', numberOfColumns=2, columnWidth=[(1, 220), (2, 50)])
cmds.setParent('..')
cmds.showWindow (theWindow)
到目前为止,我已经能够使用节点名称和 select 它们的按钮填充 RowColumnLayout。但是,我不确定如何让这些按钮起作用。 . 任何提示或想法将不胜感激。
我没有测试这段代码,但它应该可以工作。您需要使用 lambda 或 partial,我更喜欢 partial。
import maya.cmds as cmds
from functools import partial
def fillTemp(*args):
theElements = cmds.rowColumnLayout ('listColumn', query=True, childArray=True)
if theElements > 0:
for element in theElements:
cmds.deleteUI (element)
objectList = cmds.ls(type='nCloth')
for item in objectList:
cmds.setParent ('listColumn')
cmds.text ((item+'labelText'), label=item, align='left',width= 220)
cmds.button ((item+'_select'), label='Select', width= 50, command=partial(selectNode, item))
def selectNode(node, *args):
cmds.select(cl=True)
cmds.select(node)
if (cmds.window('testWin', exists=True)):
cmds.deleteUI('testWin')
theWindow = cmds.window('testWin', title='Test Window', widthHeight=(270, 390), sizeable=True)
cmds.columnLayout ('mainColumn', adjustableColumn=False)
cmds.button ('FillList', label= "nCloth in Scene", width= 270, command= fillTemp)
cmds.scrollLayout ('nClothScrollList', w=270 , h=150, backgroundColor=(.15,.15,.15) )
cmds.rowColumnLayout ('listColumn', numberOfColumns=2, columnWidth=[(1, 220), (2, 50)])
cmds.setParent('..')
cmds.showWindow (theWindow)