Maya UI - 每个选项卡中的大师

Maya UI - A master in every Tab

我在 python 中为 Maya 创建了一个 UI,我正在使用 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()

当我按下按钮时,显示 'Hello' 的文本出于某种原因只会在第二个选项卡中更改为 'Bye'。因此,如果我不能只在每个选项卡中调用我的 MasterTab 函数,是否有办法只调用一次并且它会附加到每个选项卡中?或者,如果有其他方法,我愿意接受建议。

感谢您的帮助!

您将要更改的文本对象的名称硬编码为 thatText。然而,当您第二次调用 MasterTab() 时,您将定义一个新文本(可能是 thatText1),Maya 将重命名该文本以使其具有唯一 ID——这意味着 ChangeText() 将永远无法访问它。

您可能应该捕获在 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