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
我在 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