回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>当我在一行中创建多个选项卡时,脚本有问题。如果我做两个选项卡,然后尝试编辑第一个选项卡,它会更改第二个选项卡,而不是第一个选项卡。你知道吗</p>
<pre><code>import pymel.core as pm
import maya.cmds as cmds
class TabWindow(pm.ui.Window):
def __init__(self):
super(TabWindow, self).__init__()
self.title = "TabWindow"
self.tabA = None
self.tabB = None
self.buildUI()
def modifySomethingInTabB(self):
pm.button(label="TestButton", parent=self.tabB)
def appendJointChain(self, *args):
print "button pressed"
self.set_up_Tab()
self.tool_Tab()
def fillTabA(self, parent):
pm.setParent(parent)
pm.text(label = 'Root Joint Selection', align ='center')
pm.separator(h=5)
pm.button(label = 'Add Selector', c=lambda event: self.name_DialogBox())
def fillTabB(self, parent):
pm.setParent(parent)
pm.text(label = 'FK IK Switch', align ='center')
pm.separator(h=5)
def Remove(InstanceName):
pm.deleteUI(self)
def buildUI(self):
tabLayout = None
children = []
pm.setUITemplate("DefaultTemplate", pushTemplate=True)
with pm.columnLayout(adjustableColumn=True,width=300) as cl:
with pm.tabLayout() as tabLayout:
for childName in ["My Tab A", "My Tab B"]:
with pm.columnLayout(adjustableColumn=True) as cla:
children.append((cla, childName))
self.fillTabA(children[0][0])
self.fillTabB(children[1][0])
self.tabA = children[0][0]
self.tabB = children[1][0]
pm.tabLayout(tabLayout, edit=True, tabLabel=children)
pm.setUITemplate("DefaultTemplate", popTemplate=True)
def name_DialogBox(self):
result = cmds.promptDialog(
title='Rename Object',
message='Enter Name:',
button=['OK', 'Cancel'],
defaultButton='OK',
cancelButton='Cancel',
dismissString='Cancel')
if result == 'OK':
self.InstanceName = cmds.promptDialog(query=True, text=True)
###Create New Tab using text as name####
self.appendJointChain()
return self.InstanceName
def set_up_Tab(self):
cmds.frameLayout (width = 300, label = self.InstanceName, collapse = True, collapsable = True, marginWidth = 5, parent = self.tabA);
self.nametab =cmds.text(label = self.InstanceName, align ='center')
self.tsL0 =pm.textFieldButtonGrp(ed=False, adj=1,cal=(1,"left"),cw3=(10,100,25), cl3=("left","left","left") ,
buttonLabel='Root FK', bc= lambda : self.select_joints_afk())
self.tsL1 = pm.textFieldButtonGrp(ed=False, adj=1,cal=(1,"left"),cw3=(10,100,25), cl3=("left","left","left") ,
buttonLabel='Wrist IK',bc= lambda : self.select_joints_aikw())
self.tsL2 = pm.textFieldButtonGrp(ed=False, adj=1,cal=(1,"left"),cw3=(10,100,25), cl3=("left","left","left") ,
buttonLabel='Elbow IK',bc= lambda : self.select_joints_ikpv())
pm.separator(h=5)
pm.button( label = 'Remove ' + self.InstanceName, command = lambda :Remove(), width=100)
pm.separator
return self.tsL0, self.tsL1, self.tsL2
def tool_Tab(self):
cmds.frameLayout (width = 300, label = self.InstanceName, collapse = True, collapsable = True, marginWidth = 5, parent = self.tabB);
cmds.separator(h=5)
self.row=cmds.rowLayout(numberOfColumns=2,width = 300)
self.IKbutton=cmds.button(label='IK', command = '', width=100)
self.FKbutton=cmds.button(label='FK', command = '', width=100)
self.parent=cmds.setParent('..')
self.row2=cmds.rowLayout(numberOfColumns=2,width = 300)
self.Fk2IK_Button = pm.button(label='FK 2 IK', command = lambda _: self.fk_2_ik(), width=100)
self.Ik2FK_Button = pm.button(label='IK 2 FK', command = lambda _: self.ik_2_fk(), width=100)
self.parent
def select_joints_afk(self):
if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
sel = cmds.ls(sl=True)
fkCtrls = cmds.listRelatives(sel, allDescendents=True, type=("transform",'nurbsCurve'))
self.Fks = [nurbsCurve for nurbsCurve in fkCtrls if nurbsCurve.startswith('FK') & nurbsCurve.endswith('_Ctrl')]
cmds.textFieldButtonGrp(self.tsL0, edit = True, tx ='' .join(sel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
self.Fks.extend(sel)
print self.Fks
return self.Fks,self.tsL0
else:
text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'],
defaultButton='Ok', dismissString='No' )
def select_joints_aikw(self):
if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
sel=cmds.ls(selection = True)
ikwrist = sel
self.Ikw = [nurbsCurve for nurbsCurve in ikwrist if nurbsCurve.startswith('IK') & nurbsCurve.endswith('Ctrl')]
cmds.textFieldButtonGrp(self.tsL1, edit = True, tx ='' .join(ikwrist),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
cmds.select(ikwrist)
print self.Ikw
return self.Ikw
else:
text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok',
dismissString='No' )
def select_joints_ikpv(self):
if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
sel = cmds.ls(sl=True)
ikPvsel = sel
self.ikpv = [nurbsCurve for nurbsCurve in ikPvsel if nurbsCurve.endswith('Pv_Ctrl')]
cmds.textFieldButtonGrp(self.tsL2, edit = True, tx ='' .join(ikPvsel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
cmds.select(ikPvsel)
print self.ikpv
return self.ikpv
else:
text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'],
defaultButton='Ok', dismissString='No' )
def ik_2_fk(self):
#import combined selection list
match_selection = self.Fks + self.Ikw + self.ikpv
print("List created" + str(match_selection))
def fk_2_ik(self):
#import combined selection list
match_selection = self.Fks + self.Ikw + self.ikpv
print("List created" + str(match_selection))
tw = TabWindow()
# if pm.window(tw, exists = True):
# pm.deleteUI(tw)
tw.show()
</code></pre>
<p>我的印象是,为了完成这一点,我需要让每一组选择都是一个类的实例,这样我就可以编辑它们。考虑到这一点,我搬家了</p>
<pre><code> def select_joints_afk(self):, def select_joints_aikw(self):, & def select_joints_ikpv(self):
</code></pre>
<p>像这样创建selectionChains类。。你知道吗</p>
<pre><code>class Create_Selection_Chains():
def __init__(self, name ,Fks, Ikw, ikpv):
self.name=name
self.Fks = Fks
self.Ikw = Ikw
self.ikpv = ikpv
print Fks + Ikw + ikpv
def select_joints_afk(self):
if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
sel = cmds.ls(sl=True)
fkCtrls = cmds.listRelatives(sel, allDescendents=True, type=("transform",'nurbsCurve'))
self.Fks = [nurbsCurve for nurbsCurve in fkCtrls if nurbsCurve.startswith('FK') & nurbsCurve.endswith('_Ctrl')]
cmds.textFieldButtonGrp(TabWindow().tsL0, edit = True, tx ='' .join(sel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
self.Fks.extend(sel)
print self.Fks
return self.Fks
else:
text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'],
defaultButton='Ok', dismissString='No' )
def select_joints_aikw(self):
if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
sel=cmds.ls(selection = True)
ikwrist = sel
self.Ikw = [nurbsCurve for nurbsCurve in ikwrist if nurbsCurve.startswith('IK') & nurbsCurve.endswith('Ctrl')]
cmds.textFieldButtonGrp(Set_up_Tab().tsL1, edit = True, tx ='' .join(ikwrist),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
cmds.select(ikwrist)
print self.Ikw
return self.Ikw
else:
text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'], defaultButton='Ok',
dismissString='No' )
def select_joints_ikpv(self):
if cmds.ls(selection = True,type=("transform",'nurbsCurve')):
sel = cmds.ls(sl=True)
ikPvsel = sel
self.ikpv = [nurbsCurve for nurbsCurve in ikPvsel if nurbsCurve.endswith('Pv_Ctrl')]
cmds.textFieldButtonGrp(self.tsL2, edit = True, tx ='' .join(ikPvsel),buttonLabel='IK OK',backgroundColor = (.5,.8,.2))
cmds.select(ikPvsel)
print self.ikpv
return self.ikpv
else:
text = cmds.confirmDialog( title='Error', message='Must select joint', button=['OK'],
defaultButton='Ok', dismissString='No' )
</code></pre>
<p>实例是在TabWindow类方法<code>def appendJointChain(self, *args):</code>中创建的(&A):</p>
<pre><code>self.joint_chain_select = Create_Selection_Chains( self, "foo", "bar", "baz")
</code></pre>
<p>我对此做了几次尝试(如上面的Create\u Selection\u Chains类中所示),但似乎都做不好。你知道吗</p>
<pre><code>
# Error: AttributeError: file <maya console> line 136: 'TabWindow' object has no attribute 'tsL0' #
# Error: NameError: file <maya console> line 150: global name 'Set_up_Tab' is not defined #
# Error: AttributeError: file <maya console> line 163: Create_Selection_Chains instance has no attribute 'tsL2' #
</code></pre>
<p>我想我可能需要让我在UI中创建的选项卡要么是他们自己的类,要么是create\u Selection\u Chains类的一部分,但我现在真的不确定。
有人能解释一下发生了什么事,我怎样才能解决这个问题吗?你知道吗</p>