レイアウト1 ( horizontalLayout )

レイアウトとは

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

レイアウトの種類

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

pm.autoLayout()
部品を縦 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()
タブレイアウト

複数のレイアウト

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

横に並べるレイアウト

ウインドウ上に部品を横に並べるにはpm.horizontalLayout()が一番手軽で便利です。

複数のレイアウトの例

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

  1. 以下の Python スクリプトを layout1.py という名前で作ります。
    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')
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって layout1.py を読み込んで、テンキーの Enter キーなどで実行します。
  3. 以下のようなウインドウが表示されます。
    [layout1.melの実行結果]

スクリプトの解説

import pymel.core as pm
pymel.core モジュールをインポートしてpmという名前で使用できるようにします。
with pm.window(title='layout1'):
layout1 というタイトルのついたウインドウを作ります。
この命令以下がウインドウの中身になります。
with pm.columnLayout():
レイアウトを作成します。
この関数によって、これ以降に作られる部品は縦に並んでゆきます。
with pm.horizontalLayout():
この関数により、これ以後作られる部品は横 1 列に並んでゆきます。
pm.button(label="A")
A というラベルのついたボタンを作ります。
pm.button(label="B")
B というラベルのついたボタンを作ります。
horizontalLayout() 関数の有効範囲なので A ボタンの横に並びます。
with pm.horizontalLayout():)
この関数により、これ以後作られる部品は横 1 列に並んでゆきます。
pm.button(label="C")
C というラベルのついたボタンを作ります。
pm.button(label="D")
D というラベルのついたボタン作ります。
pm.button(label="E")
E というラベルのついたボタンを作ります。

autoLayout

部品を縦方向に並べたいときに、pm.autoLayout()を使用するとウインドウを縦方向に等分割して並べてゆくことができます。

練習

まとめ

参考


Prev | Next
Home | Contents
Mail