レイアウト1 ( horizontalLayout )
レイアウトとは
ウインドウを作って部品(ボタンなど)を配置(レイアウト)してゆく場合にはレイアウト関数が必要です。
これまでは columnLayout() によって縦 1 列に部品を並べていきましたが、
それ以外の配置をする場合には、そのためのレイアウト関数を使用します。
レイアウトの種類
レイアウト関数には以下のような種類があります。
- pm.columnLayout()
- 部品を縦 1 列に並べるレイアウト
- pm.horizontalLayout()
- 部品を横 1 列に並べるレイアウト
- pm.rowLayout()
- 部品を横 1 列に並べるレイアウト
- pm.rowColumnLayout()
- 部品を縦・横に並べるレイアウト
- pm.formLayout()
- 部品を絶対的・相対的な位置指定で並べるレイアウト
- pm.frameLayout()
- 部品に枠(フレーム)をつけて表示するレイアウト
- pm.gridLayout()
- 部品を同じ大きさのセルに入れて表示するレイアウト
- pm.menuBarLayout()
- 部品にメニューバーをつけて表示するレイアウト
- pm.paneLayout()
- 子どもの部品を様々な方向で分割して表示するレイアウト
- pm.scrollLayout()
- スクロール付で部品を表示するレイアウト
- pm.shelfLayout()
- シェルフレイアウト
- pm.shelfTabLayout()
- シェルフタブレイアウト
- pm.tabLayout()
- タブレイアウト
複数のレイアウト
いままでは columnLayout() のような単純なレイアウトだけでしたが、
ひとつのレイアウトだけではできないような複雑なレイアウトを実現するためには
どうしたら良いでしょうか。
実はレイアウトは入れ子にすることができるので、
いくらでも複雑なレイアウトを作ることができるようになっています。
ただその場合には、どこまでがレイアウトの範囲なのかを決めなければなりません。
ウインドウ上の部品は必ずある 1 つのレイアウトの範囲内にある必要があるからです。
そのために、with構文を使用します。
複数のレイアウトの例
レイアウトによってボタンを縦・横に並べる GUI を作ってみましょう。
ここではウインドウの部品を横に並べるために rowLayout() を使用してみます。
なお、このスクリプトはレイアウトの練習なので各ボタンを押しても何も実行しません。
- 以下の 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;
- 以下の Python スクリプトを layout1.py という名前で作ります。
import pymel.core as pm
with pm.window(title='layout1'):
with pm.columnLayout():
pm.button(label='A')
with pm.horizontalLayout1():
pm.button(label='B')
pm.button(label='C')
pm.button(label='D')
with pm.horizontalLayout():
pm.button(label='E')
pm.button(label='F')
pm.button(label='G')
- スクリプト エディタ の によって layout1.py を読み込んで、テンキーの Enter キーなどで実行します。
- 以下のようなウインドウが表示されます。
スクリプトの解説
import pymel.core as pm
- pymel.core モジュールをインポートしてpmという名前で使用できるようにします。
-
with pm.window(title='layout1'):
- layout1 というタイトルのついたウインドウを作ります。
この命令以下がウインドウの中身になります。
-
with pm.columnLayout():
- レイアウトを作成します。
この関数によって、これ以降に作られる部品は縦に並んでゆきます。
-
pm.button(label="A")
- A というラベルのついたボタンを作ります。
-
with pm.horizontalLayout1():)
この関数により、これ以後作られる部品は横 1 列に並んでゆきます。
-
pm.button(label="B")
- B というラベルのついたボタンを作ります。
-
pm.button(label="C")
- C というラベルのついたボタンを作ります。
horizontalLayout() 関数の有効範囲なので B ボタンの横に並びます。
-
pm.button(label="D")
- D というラベルのついたボタン作ります。
ここは columnLayout() の有効範囲なのでボタンは縦に並びます。
-
with pm.horizontalLayout():)
- この関数により、これ以後作られた部品は横 1 列に並んでゆきます。
-
pm.button(label="E")
- E というラベルのついたボタンを作ります。
-
pm.button(label="F")
- F というラベルのついたボタンを作ります。
horizontalLayout() 関数の有効範囲なので E ボタンの横に並びます。
-
pm.button(label="G")
- G というラベルのついたボタン作ります。
horizontalLayout() 関数の有効範囲なので F ボタンの横に並びます。
練習
- layout1.py を参考にして layout2.py を作り、以下のようにボタンが並ぶようなレイアウトにしてください。
- 前回の GUI による項目の選択(ラジオボタン) の makePrimitive1.py を参考にして layout3.py を作り、以下のようなレイアウトに変更してください。
まとめ
- 複雑なレイアウトを実現したい場合は、 複数のレイアウトを組み合わせます。
- horizontalLayout() は部品を横に並べるレイアウト関数です。
columnLayout() 関数と組み合わせることによって、
部品を縦・横に並べてゆくことができます。
- あるレイアウトの有効範囲を決めるためには setParent() 関数を使用します。
参考
Prev | Next
Home | Contents
Mail