レイアウト1 ( rowLayout )

レイアウトとは

ウインドウを作って部品(ボタンなど)を配置(レイアウト)してゆく場合にはレイアウト関数が必要です。
これまでは columnLayout() によって縦 1 列に部品を並べていきましたが、 それ以外の配置をする場合には、そのためのレイアウト関数を使用します。

レイアウトの種類

レイアウト関数には以下のような種類があります。

maya.cmds.columnLayout()
部品を縦 1 列に並べるレイアウト
maya.cmds.rowLayout()
部品を横 1 列に並べるレイアウト
maya.cmds.rowColumnLayout()
部品を縦・横に並べるレイアウト
maya.cmds.formLayout()
部品を絶対的・相対的な位置指定で並べるレイアウト
maya.cmds.frameLayout()
部品に枠(フレーム)をつけて表示するレイアウト
maya.cmds.gridLayout()
部品を同じ大きさのセルに入れて表示するレイアウト
maya.cmds.menuBarLayout()
部品にメニューバーをつけて表示するレイアウト
maya.cmds.paneLayout()
子どもの部品を様々な方向で分割して表示するレイアウト
maya.cmds.scrollLayout()
スクロール付で部品を表示するレイアウト
maya.cmds.shelfLayout()
シェルフレイアウト
maya.cmds.shelfTabLayout()
シェルフタブレイアウト
maya.cmds.tabLayout()
タブレイアウト

サンプルプログラムと図は Layoutの一覧 を参照してください。

複数のレイアウト

いままでは columnLayout() のような単純なレイアウトだけでしたが、 ひとつのレイアウトだけではできないような複雑なレイアウトを実現するためには どうしたら良いでしょうか。
実はレイアウトは入れ子にすることができるので、 いくらでも複雑なレイアウトを作ることができるようになっています。
ただその場合には、どこまでがレイアウトの範囲なのかを決めなければなりません。 ウインドウ上の部品は必ずある 1 つのレイアウトの範囲内にある必要があるからです。 そのための関数として maya.cmds.setParent('..') を使用して、 どこまでが特定のレイアウトの範囲なのかを決めてゆきます。

複数のレイアウトの例

レイアウトによってボタンを縦・横に並べる GUI を作ってみましょう。
ここではウインドウの部品を横に並べるために rowLayout() を使用してみます。
なお、このスクリプトはレイアウトの練習なので各ボタンを押しても何も実行しません。

  1. 以下の MEL スクリプトを Python スクリプトに書き直して、 layout1.py という名前で保存します。
    window -title "layout1";
    columnLayout;
    button -label "A";
    rowLayout -numberOfColumns 2 -columnWidth2 20 20;
    	button -label "B";
    	button -label "C";
    setParent ..;
    button -label "D";
    rowLayout -numberOfColumns 3 -columnWidth3 20 20 20;
    	button -label "E";
    	button -label "F";
    	button -label "G";
    setParent ..;
    showWindow;
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって layout1.py を読み込んで、テンキーの Enter キーなどで実行します。
  3. 以下のようなウインドウが表示されます。
    [layout1.melの実行結果]

Tips

上の setParent 関数の説明で、 この関数はレイアウトの範囲を区切るために使うと説明してきましたが、 今までのウインドウを作成するスクリプトでは setParent() 関数は使っていませんでした。
実は、今までの各スクリプトの最初に実行されている columnLayout() 関数に対応する setParent() 関数は省略しているだけなので、 実行しても問題ありません。
省略しないとどうなるかは、以下のスクリプトを実行してみるとわかります。


import maya.cmds

maya.cmds.window()
maya.cmds.columnLayout()
maya.cmds.setParent('..')
maya.cmds.showWindow()

実行すると何もないウインドウが表示されます。
表示された後で、 maya.cmds.button() 関数を実行してみてください。
するとウインドウにボタンが現れます。
同様に、部品を作る関数(スライダーなど)を実行すると、 ウインドウに部品が追加されてゆくのがわかると思います。

練習

まとめ

参考


Prev | Next
Home | Contents
Mail