Python 从UI中添加(&;命名)或删除一组UI元素
我正在maya中制作一个UI,我希望在我按下“添加”+“或删除”-“按钮时,可以创建一个包含一组Python 从UI中添加(&;命名)或删除一组UI元素,python,user-interface,maya,Python,User Interface,Maya,我正在maya中制作一个UI,我希望在我按下“添加”+“或删除”-“按钮时,可以创建一个包含一组textFieldButtonGrp的下拉选项卡(并提示命名该选项卡)或将其删除 用户界面代码(带有一个选项卡): 我的问题是,我不确定如何将新的_选项卡内容添加到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)