スライダーを使った GUI

スライダー

スライダーには以下の種類があります。
intfloat のスライダーの違いは整数値をとるか、実数値をとるかの違いだけです。
intSliderfloatSliderfloatSliderGrpattrFieldSliderGrp は見かけ上はほとんど違いがありません。

intSlider
整数のスライダーです。
[intSliderの画像]
intSliderGrp
ラベル、整数値のフィールド、整数値のスライダーを組み合わせたものです。
[intSliderGrpの画像]
floatSlider
実数のスライダーです。
[floatSliderの画像]
floatSliderGrp
ラベル、実数値のフィールド、実数値のスライダーを組み合わせたものです。
[floatSliderGrpの画像]
attrFieldSliderGrp
ラベル、実数値のフィールド、実数値のスライダーを組み合わせたものでノードのアトリビュートに接続してリアルタイムに値を変更できます。
[attrFieldSliderGrpの画像]

スライダーの使い方

スライダーはボタンのようにコントロール(ウインドウの部品)の一種ですが、 ボタンと違って少し使い方が複雑です。
スラーダーを使用する時は以下の手順で実行します。

  1. スライダーの作成
    ボタンと同じようにレイアウトコマンドの後でスライダーコマンドを実行してスライダーを作ります。
    pymel.core.floatSliderGrp('スライダー名', label='ラベル', field=True, min=最小値, max=最大値, step=増分, value=初期値)
  2. スライダーの値を得る
    現在のスライダーの値を得るためには、 もう一度スライダーコマンドを実行します。
    pymel.core.floatSliderGrp('スライダー名', q=True, value=True)

スライダーコマンドは上のように 2 度以上実行されるのが普通です。

スライダーの使用例

ここでは floatSliderGrp を使ってみましょう。
以下のスクリプトはスライダーで指定された半径の球を作るものです。
作成 ボタンを押すと指定された半径の球がひとつ作られます。

  1. 以下の MEL スクリプトを Python スクリプトに書き直して、 slider1.py という名前で保存します。
    global proc makeSphere()
    {
    	float $val;
    
    	$val = `floatSliderGrp -q -value radiusSlider`;
    	sphere;
    	scale $val $val $val;
    }
    
    window -title "slider1";
    columnLayout;
    text -label "球を作成";
    floatSliderGrp -label "半径" -field true
    	-min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider;
    button -label "作成" -command "makeSphere()";
    showWindow;
    
  2. 以下の Python スクリプトを slider1.py という名前で作ります。
    import pymel.core
    
    def makeSphere():
        val = pymel.core.floatSliderGrp('radiusSlider', q=True, value=True)
        pymel.core.sphere()
        pymel.core.scale([val, val, val])
    
    pymel.core.window(title='slider1')
    pymel.core.columnLayout()
    pymel.core.text(label=u'球を作成')
    pymel.core.floatSliderGrp('radiusSlider', label=u'半径', field=True,
                              min=0.1, max=20.0, step=0.1, value=1.0)
    pymel.core.button(label=u'作成', command='makeSphere()')
    pymel.core.showWindow()
    
  3. スクリプト エディタ の ファイル → スクリプトのロード によって slider1.py を読み込んで、テンキーの Enter キーなどで実行します。
  4. 以下のようなウインドウが表示されます。
    [slider1.melの実行結果]
  5. スライダーの値を 2.0 にして 作成 ボタンを押すと XYZ 方向に 2 倍スケールされた NURBS の球が作られます。
    [作成 ボタンを押した実行結果]

スクリプトの解説

import pymel.core
pymel.core モジュールをインポートします。
def makeSphere():
makeSphere という名前の関数の宣言です。
val = pymel.core.floatSliderGrp('radiusSlider', q=True, value=True)
radiusSlider という名前のスライダーから現在の値を得て 変数 val に代入します。
q=True, value=True というフラグによってスライダーの値を得ることができます。
pymel.core.sphere()
NURBS の球体を作ります。
pymel.core.scale([val, val, val])
val の値で XYZ 方向にスケールをかけます。
pymel.core.window(title='slider1')
slider1 というタイトルのついたウインドウを作ります。
pymel.core.columnLayout()
GUI 部品を縦に並べるレイアウトコマンドです。
pymel.core.text(label=u'球を作成')
text() 関数によってウインドウ内にテキストを表示します。
label を忘れないようにしてください。
文字列の前の u は Unicode を表します。 文字列に日本語を使用するときには、文字列の前に u をつけます。
pymel.core.floatSliderGrp('radiusSlider', label=u'半径', field=True,\
min=0.1, max=20.0, step=0.1, value=1.0)
radiusSlider という名前の floatSliderGrp を作ります。
floatSliderGrp の各フラグの意味は以下の通りです。
'radiusSlider'
この floatSliderGrp の名前です。
後でスライダーから値を得る時に使用します。
名前を指定しないとデフォールトの名前(floatSlider1 など)がつきます。
label=u'半径'
左側に表示されるラベルです。
field=True
フィールドを表示するかどうかを決めます。
True だとフィールドを表示します。
False だとフィールドの部分が表示されません。
min=0.1
スライダーの最小値。
スライダーを一番左にスライドさせた時の値です。
max=20.0
スライダーの最大値です。
スライダーを一番右にスライドさせた時の値です。
step=0.1
スライダーの増分値です。
スライダーの地の部分でマウスを1回クリックした時に増減する値のことです。
value=1.0
スライダー・フィールドの初期値です。
スライダーが表示された時の最初の値です。
pymel.core.button(label=u'作成', command='makeSphere()')
押すと makeSphere() が実行される、作成 というラベルのついたボタンを作ります。
pymel.core.showWindow()
ウインドウを表示します。

Tips (attrFieldSliderGrp の例)

オブジェクトの X 方向のスケールを変更するスクリプトです。
シーンに NURBS の球体を 1 個作ってから、以下のスクリプトを実行してみてください。
NURBS の球体は nurbsSphere1 という名前だとします。

import pymel.core

pymel.core.window(title='attrFieldSliderGrp')
pymel.core.columnLayout()
pymel.core.text(label='Change Sphere Scale')
pymel.core.attrFieldSliderGrp(label='scale X',
	min=0.1, max=20.0, at='nurbsSphere1.sx')
pymel.core.showWindow()
[attrFieldSliderGrp の例]

練習

まとめ

参考


Prev | Next
Home | Contents
Mail