Maya Python:在交互式创建的按钮上调用命令

时间:2015-10-24 22:58:57

标签: python maya

我试图编写一个小脚本来创建' n' UI上的按钮,取决于场景中存在多少个nCloth节点,因此用户可以通过按下相应的按钮来选择节点(为了测试我现在只需要它们来选择节点)。这是我到目前为止所得到的:

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)

到目前为止,我已经能够使用节点名称和一个按钮来填充RowColumnLayout以选择它们。但是,我不知道如何让这些按钮工作..任何提示或想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有测试过这段代码,但它应该可行。你需要使用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)