Python 从UI中添加(&;命名)或删除一组UI元素

Python 从UI中添加(&;命名)或删除一组UI元素,python,user-interface,maya,Python,User Interface,Maya,我正在maya中制作一个UI,我希望在我按下“添加”+“或删除”-“按钮时,可以创建一个包含一组textFieldButtonGrp的下拉选项卡(并提示命名该选项卡)或将其删除 用户界面代码(带有一个选项卡): 我的问题是,我不确定如何将新的_选项卡内容添加到UI中 有人能给我指一下正确的方向吗?我不知道你被卡在哪里了。您是否询问如何使用+按钮将按钮添加到布局中?如果我不清楚,请原谅。我一直在添加+和-&添加或删除下拉列表。我在图片中用红色标出了两个部分,但没有保留这种方式。我会尽快更改它。让我

我正在maya中制作一个UI,我希望在我按下“添加”+“或删除”-“按钮时,可以创建一个包含一组
textFieldButtonGrp
的下拉选项卡(并提示命名该选项卡)或将其删除

用户界面代码(带有一个选项卡):

我的问题是,我不确定如何将新的_选项卡内容添加到UI中


有人能给我指一下正确的方向吗?

我不知道你被卡在哪里了。您是否询问如何使用+按钮将按钮添加到布局中?如果我不清楚,请原谅。我一直在添加+和-&添加或删除下拉列表。我在图片中用红色标出了两个部分,但没有保留这种方式。我会尽快更改它。让我们明确一点:您想要一个
+
按钮来提示用户输入新的
框架布局的名称,该布局将使用多个
文本字段按钮rp
小部件创建?
-
按钮是如何工作的?我知道它应该删除一个
frameLayout
,但是它怎么知道要删除哪一个呢?还有,到目前为止你试过什么?这段代码没有试图制作这些按钮。我同意绿色单元格。有一个建议可能会对你有所帮助,你可能需要把它看作是“小部件”。如果要在布局中添加或删除某些内容,此布局内容应由函数创建。然后你把这个函数的输出存储在一个字典里,这样你就可以解析它,然后在以后删除它们(可能用一个id号来排序和删除它们),我个人会为每个小部件动态创建一个小的删除按钮。Weeny博士关于词典和删除索引的想法也是一个不错的选择。
import maya.cmds as cmds
import pymel.core as pm
import maya.cmds as cmds
import maya.OpenMaya as om
import math

from functools import partial


###################################################################################
            #TOOL WINDOW#                       #TOOL WINDOW#
###################################################################################
def frameCollapseChanged(ToolWindow):
         cmds.evalDeferred("cmds.window('ToolUI', e=1, h=sum([eval('cmds.' + cmds.objectTypeUI(child) + '(\\'' + child + '\\', q=1, h=1)') for child in mc.columnLayout('" + ToolWindow + "', q=1, ca=1)]))")

     #check to see if window exists
if cmds.window("ToolUI", exists = True):
     cmds.deleteUI("ToolUI")
     #create window
ToolWindow = cmds.window("ToolUI", title = "Tool UI", mnb = True, mxb = False,)
    #create a main layout
mainLayout = cmds.columnLayout (adjustableColumn=True)

form = cmds.formLayout()
tabs = cmds.tabLayout(innerMarginWidth=5, innerMarginHeight=5,cr=True)
cmds.formLayout( form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0)) )
###################################################################################
            #SETUP TAB CONTENT#                       #SETUP TAB CONTENT#
###################################################################################
child1 = cmds.rowColumnLayout(numberOfColumns=1,adjustableColumn=True)
cmds.text(label = 'Root Joint Selection', align ='center')
cmds.button(label = 'Add Selector', command=lambda event:Name_DialogBox())

cmds.setParent( '..' )

###################################################################################
            #TOOL TAB CONTENT#                       #TOOL TAB CONTENT#
###################################################################################

child2 = cmds.rowColumnLayout(numberOfColumns=2, columnWidth=(300,250),adjustableColumn=True)

cmds.columnLayout(columnAttach=('both', 5),columnWidth=300, columnAlign="center", adjustableColumn=True )
cmds.text(label = 'FK IK Switch', align ='center')



cmds.setParent( '..' )
cmds.setParent( '..' )

###################################################################################
            #TOOL TABS#                                #TOOL TABS#
###################################################################################
cmds.tabLayout( tabs, edit=True, tabLabel=((child1, 'Set Up'), (child2, 'Tool')) )

cmds.showWindow()


winHeight = 0
     # iterate through all children of the main layout
for child in cmds.columnLayout(mainLayout, q=1, ca=1):
         # for each child, get it's type, then use that run an eval command to get that ui item's 
         #height and add it to the height variable
     winHeight += eval('cmds.' + cmds.objectTypeUI(child) + '("' + child + '", q=1, h=1)')
     # set the window height with the gathered height values
cmds.window('ToolUI', e=1, h=winHeight) 


#################################################################################################################
            #CREATE SELECTION LISTS#                                #CREATE SELECTION LISTS# 
#################################################################################################################

def Name_DialogBox():
    result = cmds.promptDialog(
            title='Rename Object',
            message='Enter Name:',
            button=['OK', 'Cancel'],
            defaultButton='OK',
            cancelButton='Cancel',
            dismissString='Cancel')

    if result == 'OK':
        InstanceName = cmds.promptDialog(query=True, text=True)
        print InstanceName
        ###Create New Tab using text as name####
        New_Tab_Set(InstanceName)
        return InstanceName




class New_Tab_Set:

    def __init__(self, InstanceName):
        self.name = InstanceName


    def Set_up_Tab(self):

        self.tab1=cmds.frameLayout (width = 300, label = self.name,  collapse = True, collapsable = True, marginWidth = 5, parent = child1);
        self.cmds.text(label = self.name, align ='center')
        self.tsL0 =cmds.textFieldButtonGrp(ed=False, adj=1,cal=(1,"left"),cw3=(10,100,25), cl3=("left","left","left") , 
                                    buttonLabel='Root   FK',bc = 'Create_Selection_Chains.select_joints_afk(left_arm_select)' )
        self.gtF0 = tsL0 

        self.tsL1 = cmds.textFieldButtonGrp(ed=False, adj=1,cal=(1,"left"),cw3=(10,100,25), cl3=("left","left","left") , 
                                    buttonLabel='Wrist   IK',bc = 'Create_Selection_Chains.select_joints_aikw(left_arm_select)')
        self.gtF1 = tsL1

        self.tsL2 = cmds.textFieldButtonGrp(ed=False, adj=1,cal=(1,"left"),cw3=(10,100,25), cl3=("left","left","left") , 
                                    buttonLabel='Elbow IK',bc = 'Create_Selection_Chains.select_joints_ikpv(left_arm_select)' )
        self.gtF2 = tsL2

        self.cmds.separator(h=5)
        self.cmds.button(label= 'Remove' + self.name, command = 'Remove()', width=100)
        self.cmds.separator(h=5)