2016-04-15 6 views
0

私はマヤのためのpythonでUIを作成している、と私は私のユーザーインターフェイスに多くのrowColumnLayout(タブ)を持っているtabLayoutを使用しています。それぞれのタブでは、上部の部分にはすべてのタブで同じであるが、正しく更新されないため、各タブにインスタンスが重複することなく、Masterが必要です。つまり、あるタブで何かを変更すると、他のタブでは更新されません。ここでマヤUI - すべてのタブでマスター

は私の問題の簡単な例ですが、私はそれぞれのタブで機能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() 

私はボタンを押すとテキスト示す「こんにちは」は唯一の「さようなら」に変更されます何らかの理由で2番目のタブ。だから私はすべてのタブで私のMasterTab関数を呼び出すことができない場合、それを一度だけ呼び出す方法があり、それはすべてのタブに添付されますか?あるいは、別の方法がある場合は、私は提案をすることができます。

ありがとうございました!

答えて

0

変更するテキストオブジェクトの名前をthatTextとしてハードコーディングしています。しかし、2回目にMasterTab()と呼ぶと、新しいテキスト(おそらくthatText1)がMayaの名前を変更して一意のIDを持つように定義されます。つまり、ChangeText()は決してそれに到達しません。あなたはおそらくMasterTab()で作成したテキストオブジェクトの名前をキャプチャし、そこにそれを使用する必要があります

:これらのコマンドにhere

+0

スコーピングのニュアンスに

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) 

より詳細には、あなたの答えをありがとう!私はそれが名前変更の問題かもしれないと思った..しかし、このコードでは、ボタンは同じタブのテキストを変更するだけで、私が必要とするようなタブはない。フィールドをインスタンス化する簡単な方法が見つからない場合は、各タブの各フィールドの変更を適用するための回避策を講じなければならないと思います。 – Woogi

+0

Mayaには、そういう世界的な価値観のアイデアはありません。あなたの最善の策は、すべての状態を共有変数に格納し、変数を使用してtabLayoutの 'preSelectCommand'フックでUIを更新することです。 – theodox

+0

ありがとうtheodox – Woogi

関連する問題