【Maya Python】リサイズ可能な下部ボタン付きのUIを作る

Tech

はじめに

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

完成イメージ

Maya Python UIのリサイズ可能な下部ボタンの完成イメージ(通常サイズ)
ウィンドウリサイズ時にボタンが均等にスケールされる様子
ウィンドウをリサイズすると、ボタンが均等にスケールされます

コード全体

コード解説

ウィンドウの作成

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) の位置に固定します。「適用して閉じる」「閉じる」ボタンも同様に、下側をフォームの下端に固定しています。

attachFormで各ボタンの下側をフォームの下側に固定する説明図

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

attachFormで左右のボタンをフォームの左右に固定する説明図

attachPosition

attachPosition = [
        (apply_and_close_btn, 'right',  0, 33),
        (close_btn,           'left',   0, 66)
]

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

attachPositionで割合ベースのレイアウト位置を設定する説明図

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 の位置に固定しています。

attachControlで隣接ボタン間のオフセットを設定する説明図

ウィンドウの表示

cmds.showWindow(window)

完成したウィンドウを表示します。

まとめ

formLayoutattachFormattachPositionattachControl を組み合わせることで、ウィンドウサイズに追従する均等配置のボタンを実現できます。ポイントは以下の3つです。

  • attachForm:フォーム端への固定(上下左右のマージン)
  • attachPosition:割合ベースの位置指定(均等分割)
  • attachControl:隣接コントロールとの相対位置指定(ボタン間の隙間)

この3つの使い分けを覚えておくと、複雑なレイアウトにも柔軟に対応できます。

コメント

タイトルとURLをコピーしました