Maya UI - 每个标签中的主人

时间:2016-04-15 17:31:37

标签: python user-interface maya

我已经在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函数,是否有办法只调用一次,它会附加在每个标签中?或者,如果有其他方式,我愿意接受建议。

感谢您的帮助!

1 个答案:

答案 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