はじめに
この記事では、MayaのPython(cmds.formLayout)を使って、ウィンドウのリサイズに追従する下部ボタンを作成する方法を解説します。
完成イメージ


コード全体
コード解説
ウィンドウの作成
window = cmds.window(
title='タイトル ラベル', w=400, h=150,
sizeable=True,
resizeToFitChildren=True
)
sizeable=True:ウィンドウサイズをインタラクティブに変更できるようにします。resizeToFitChildren=True:ウィンドウの拡縮に合わせてコントロールをフィットさせます。
レイアウトとボタンの作成
lo = cmds.formLayout(numberOfDivisions=100)
apply_and_close_btn = cmds.button(l='Apply and Close', h=27)
apply_btn = cmds.button(l='Apply', h=27)
close_btn = cmds.button(l='Close', h=27)
cmds.setParent('..')
cmds.formLayout():formレイアウトを作成します。numberOfDivisions=100:後でattachPositionで使用する分割数です。cmds.button():ボタンを作成します。cmds.setParent('..'):親子階層を1つ上がります。フォームレイアウト作成からここまでに作成したボタンは、自動的にフォームレイアウトの子になります。
attachForm
attachForm = [
(apply_and_close_btn, 'bottom', margin),
(apply_btn, 'bottom', margin),
(close_btn, 'bottom', margin),
(apply_and_close_btn, 'left', margin),
(close_btn, 'right', margin)
]
(apply_btn, 'bottom', margin):「適用」ボタンの下側を、formLayoutの下端から margin(px) の位置に固定します。「適用して閉じる」「閉じる」ボタンも同様に、下側をフォームの下端に固定しています。

(apply_and_close_btn, 'left', margin):「適用して閉じる」ボタンの左側を、フォームの左端に固定します。「閉じる」ボタンは右側をフォームの右端に固定しています。

attachPosition
attachPosition = [
(apply_and_close_btn, 'right', 0, 33),
(close_btn, 'left', 0, 66)
]
(apply_and_close_btn, 'right', 0, 33):「適用して閉じる」ボタンの右側を、左から 33/100(numberOfDivisions)の割合の位置に固定します。この割合は常に左上を基準として計算されます。

attachControl
attachControl = [
(apply_btn, 'left', 4, apply_and_close_btn),
(apply_btn, 'right', 4, close_btn)
]
(apply_btn, 'left', 4, apply_and_close_btn):「適用」ボタンの左側を、「適用して閉じる」ボタンの右側から 4px の位置に固定します。同様に、「適用」ボタンの右側は「閉じる」ボタンの左側から 4px の位置に固定しています。

ウィンドウの表示
cmds.showWindow(window)
完成したウィンドウを表示します。
まとめ
formLayout の attachForm・attachPosition・attachControl を組み合わせることで、ウィンドウサイズに追従する均等配置のボタンを実現できます。ポイントは以下の3つです。
attachForm:フォーム端への固定(上下左右のマージン)attachPosition:割合ベースの位置指定(均等分割)attachControl:隣接コントロールとの相対位置指定(ボタン間の隙間)
この3つの使い分けを覚えておくと、複雑なレイアウトにも柔軟に対応できます。



コメント