2017-04-23 14 views
1

私は1から10までのスライダーを持っており、ユーザーが毎回スライダーで選択した値を保存したいと思います。スライダーの動きに合わせて値を更新したい。これは私がfloatSliderGrpの値をPythonに格納する方法Maya

私はPASSVALUE引数がある値を渡したい
def PrintValue(): 
    print value 

cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, 
value=0 ,dc=PrintValue(PASSVALUE)) 

、スライダーから値を取得する方法があり、これまで持っているものでしょうか?

答えて

2

'価値' を持つ別のポストがためのフラグですfloatSliderGrp - 変数ではありません。そのため、直接印刷することはできません。

あなたのやりたいことに応じて、次の2つの方法で進むことができます。

  1. 作成したコントロールの名前を保存し、他の関数の値を求めることができます。 partialを使用すると、コントロール名を関数にバインドすることができます。または、コントロール名を作成し直すだけで、関心のあるUI要素の名前を知っている関数が作成されます。この場合、スライダにコマンドを入力しないでください。スライダの値を知る必要がある他の要素には、
  2. という変数を作成し、スライダ値が変更されるたびに更新できます。多くのツールで値を知る必要がある場合は、クラスを作成してスライダの値を入力することをお勧めします。他のコードではUIを気にすることなく値を取得できます。スライダが変化したときにシーン内で何かをしたい場合は、スライダを動かすときにupdate_slider_value()関数を変更することができます。

ここにアプローチ1があります。これは、スライダにdcイベントをフックしようとしない - それはちょうど、スライダーオブジェクトの名前を覚えて、それを知っている必要があるときに値を照会します。

wnd = cmds.window() 
col = cmds.columnLayout() 
slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0) 
b = cmds.button('print value') 
# since this is defined after `slider`, it knows the value 
def print_value(*_): 
    print cmds.floatSliderGrp(slider, q=True, v=True) 
cmds.button(b, e=True, c=print_value) 
cmds.showWindow(wnd) 

ここでのアプローチ#2で行わ同じことです。

class SliderWindow(object): 

    def __init__(self): 
     self.value = 0 
     self.window = cmds.window(title ="SliderWindow") 
     self.column = cmds.columnLayout() 
     self.slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0, dc= self.update_slider_value) 
     cmds.button('print value', c= self.print_value) 
     cmds.showWindow(self.window) 

    def update_slider_value(self, *_): 
     self.value = cmds.floatSliderGrp(self.slider, q=True, v=True) 


    def print_value(self, *_): 
     print self.value 

example = SliderWindow() 

exampleを知っている誰もがちょうどexample.valueを求めると、現在のスライダーの値を取得することができます。これはより複雑なケースには適していますが、単純なものには過度の負荷がかかります。

関連情報:Maya callbacks cheatsheet

1

モジュールを使用します。部分的

form functools import partial 

#update the query of the slider 
def getSliderValue(sliderName): 
    return cmds.floatSliderGrp(sliderName, q=1, v=1) 

#funciton for the ui 
def PrintValue(sliderName, *args): 
    value = getSliderValue(sliderName) 
    print value 

#define slider into var 
Slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, 
value=0, dc='placeholder') 
#now that we have the name of the slider, edit the function to pass it throught 
cmds.floatSliderGrp(Slider , e=True, dc= partial(PrintValue, Slider)) 

--- EDIT ---- ここで同じ質問

How to create Maya sliders to move objects in interface

関連する問題