ウインドウを作って部品(ボタンなど)を配置(レイアウト)してゆく場合にはレイアウト関数が必要です。
これまでは pm.columnLayout() によって縦 1 列に部品を並べていきましたが、
それ以外の配置をする場合には、そのためのレイアウト関数を使用します。
レイアウト関数には以下のような種類があります。
いままでは pm.columnLayout() を使用した単純なレイアウトだけでしたが、
ひとつのレイアウトだけではできないような複雑なレイアウトを実現するためには
どうしたら良いでしょうか。
実はレイアウトは入れ子にすることができるので、
いくらでも複雑なレイアウトを作ることができるようになっています。
ただその場合には、どこまでがレイアウトの範囲なのかを決めなければなりません。
ウインドウ上の部品は必ずある 1 つのレイアウトの範囲内にある必要があるからです。
そのために、with構文を使用します。
ウインドウ上に部品を横に並べるにはpm.horizontalLayout()が一番手軽で便利です。
import pymel.core as pm with pm.window(title='horizontalLayout1'): with pm.horizontalLayout(): pm.button(label='A') pm.button(label='B')
import pymel.core as pm with pm.window(title='horizontalLayout2'): with pm.columnLayout(): with pm.horizontalLayout(): pm.button(label='A') pm.button(label='B')
pm.horizontalLayout()によってボタンを縦・横に並べる GUI を作ってみましょう。
なお、このスクリプトはレイアウトの練習なので各ボタンを押しても何も実行しません。
import pymel.core as pm with pm.window(title='horizontalLayout3'): with pm.columnLayout(): with pm.horizontalLayout(): pm.button(label='A') pm.button(label='B') with pm.horizontalLayout(): pm.button(label='C') pm.button(label='D') pm.button(label='E')
import pymel.core as pm
with pm.window(title='layout1'):
with pm.columnLayout():
with pm.horizontalLayout():
pm.button(label="A")
pm.button(label="B")
with pm.horizontalLayout():)
pm.button(label="C")
pm.button(label="D")
pm.button(label="E")
部品を縦方向に並べたいときに、pm.autoLayout()を使用するとウインドウを縦方向に等分割して並べてゆくことができます。
import pymel.core as pm with pm.window(title='autoLayout1'): with pm.autoLayout(): pm.button(label='A') pm.button(label='B')
import pymel.core as pm with pm.window(title='autoLayout2'): with pm.autoLayout(): pm.button(label='A') pm.button(label='B') with pm.autoLayout(): pm.button(label='C') pm.button(label='D')
import pymel.core as pm with pm.window(title='autoLayout3'): with pm.autoLayout(): with pm.columnLayout(): pm.button(label='A') pm.button(label='B') with pm.columnLayout(): pm.button(label='C') pm.button(label='D')