ウインドウを作って部品(ボタンなど)を配置(レイアウト)してゆく場合にはレイアウト関数が必要です。
これまでは columnLayout() によって縦 1 列に部品を並べていきましたが、
それ以外の配置をする場合には、そのためのレイアウト関数を使用します。
レイアウト関数には以下のような種類があります。
いままでは columnLayout() のような単純なレイアウトだけでしたが、
ひとつのレイアウトだけではできないような複雑なレイアウトを実現するためには
どうしたら良いでしょうか。
実はレイアウトは入れ子にすることができるので、
いくらでも複雑なレイアウトを作ることができるようになっています。
ただその場合には、どこまでがレイアウトの範囲なのかを決めなければなりません。
ウインドウ上の部品は必ずある 1 つのレイアウトの範囲内にある必要があるからです。
そのために、with構文を使用します。
レイアウトによってボタンを縦・横に並べる GUI を作ってみましょう。
ここではウインドウの部品を横に並べるために rowLayout() を使用してみます。
なお、このスクリプトはレイアウトの練習なので各ボタンを押しても何も実行しません。
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;
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')
import pymel.core as pm
with pm.window(title='layout1'):
with pm.columnLayout():
pm.button(label="A")
with pm.horizontalLayout1():)
この関数により、これ以後作られる部品は横 1 列に並んでゆきます。
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")