我已经在Maya的python中创建了一个用户界面,而我正在使用 tabLayout
在我的网站上有很多 rowColumnLayout
(标签符号)用户界面。在每个选项卡中,我希望顶部的Master
对于每个选项卡都是相同的,但每个选项卡没有重复的实例,因为它不会正确更新。我的意思是,当我在一个标签中更改某些内容时,它不会在其他标签中更新。
以下是我的问题的简化示例,我在每个标签中使用了一个函数MasterTab
:
import maya.cmds as cmds
def ChangeText(*arg) : cmds.text('thatText', edit=True, label='Bye')
def MasterTab(*arg) :
cmds.button(label='Press Me', command = ChangeText)
cmds.text('thatText', label='Hello')
cmds.window( widthHeight=(200, 150) )
form = cmds.formLayout()
tabs = cmds.tabLayout(innerMarginWidth=5, innerMarginHeight=5)
cmds.formLayout( form, edit=True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0)) )
child1 = cmds.rowColumnLayout(numberOfColumns=2)
# Part I want in every tab
MasterTab()
# Tab One
cmds.text(label='text of tab One', h=50, align='left')
cmds.setParent( '..' )
child2 = cmds.rowColumnLayout(numberOfColumns=2)
# Part I want in every tab
MasterTab()
# Tab Two
cmds.text(label='text of tab Two', h=50, align='left')
cmds.setParent( '..' )
cmds.tabLayout( tabs, edit=True, tabLabel=((child1, 'One'), (child2, 'Two')) )
cmds.showWindow()
当我按下按钮时,由于某种原因,显示“你好”的文字只会在第二个标签中变为“再见”。因此,如果我不能在每个标签中调用MasterTab
函数,是否有办法只调用一次,它会附加在每个标签中?或者,如果有其他方式,我愿意接受建议。
感谢您的帮助!
答案 0 :(得分:0)
您要将要更改的文本对象的名称硬编码为thatText
。但是,当您第二次调用MasterTab()
时,您将定义一个新文本(可能是thatText1
),Maya将重命名该文本,因此它具有唯一的ID - 这意味着ChangeText()
将无法访问它。 / p>
您应该捕获在MasterTab()
中创建的文本对象的名称并在那里使用它:
def MasterTab():
btn = cmds.button(label='Press Me')
# use a '#' in the name to get a unique number suffix....
edit_me = cmds.text('edit_me#', label='Hello')
# define the handler here, when you know what 'edit_me' is...
def change_text(_):
cmds.text(edit_me, e=True, label = 'bye')
# now attach the command...
cmds.button(btn, e=True, c=change_text)
有关确定这些命令范围的细微差别的详细信息here