파이썬

마야 레이아웃

뚜_ 2025. 9. 11. 19:20

기본 성질

  • cmds.columnLayout, cmds.rowLayout, cmds.formLayout 호출 시 그 다음에 호출되는 UI 요소들(예: cmds.text, cmds.button)은 해당 레이아웃 내부에 배치된다. 상위 레이아웃 또는 특정 레이아웃으로 빠져나가고 싶은 경우 cmds.setParent 를 사용한다.
  • cmds.columnLayout, cmds.rowLayout 은 말그대로 하위 요소들이 세로로 배치 또는 가로로 배치되며 cmds.formLayout은 attach 시 부모나 다른 요소에 상대적으로 배치 가능하다.

formLayout의 attach 옵션들

attachForm

css의 position: absolute 와 비슷하다. 즉 부모 formLayout 모서리 상대적으로 배치 가능하다.

예시: cmds.formLayout(form, edit=True, attachForm=[(button1, "top", 5), (button1, "left", 5)])

→ button1 을 form 위쪽에서 5px, 왼쪽에서 5px 띄움.

attachControl

css의 margin-left, margin-top과 비슷하다. 즉 다른 UI 요소에 상대적으로 배치 가능하다.

예시: cmds.formLayout(form, edit=True, attachControl=[(button2, "top", 5, button1)])

→ button2 는 button1 밑으로 5px 떨어져서 배치됨.

attachPosition

css의 left: 50% 같이 퍼센트 기반 위치 지정과 유사하다. 즉 부모 formLayout 크기 상대적으로 배치 가능하다.

예시: cmds.formLayout(form, edit=True, attachPosition=[(button3, "left", 0, 50)])

→ button3 을 form의 가로 50% 지점에 붙임.

종합 예시

import maya.cmds as cmds

if cmds.window("formTestWin", exists=True):
    cmds.deleteUI("formTestWin")

cmds.window("formTestWin", title="FormLayout Test", widthHeight=(300, 150))
form = cmds.formLayout()

btn1 = cmds.button(label="Top Left")
btn2 = cmds.button(label="Below Btn1")
btn3 = cmds.button(label="Right Half")

cmds.formLayout(form, edit=True,
    attachForm=[(btn1, "top", 5), (btn1, "left", 5)],          # 부모 모서리에 붙이기
    attachControl=[(btn2, "top", 5, btn1)],                     # 다른 버튼 기준
    attachPosition=[(btn3, "left", 0, 50), (btn3, "top", 30)])  # 퍼센트 기반
cmds.showWindow("formTestWin")
  • btn1 → form의 좌측 상단에 고정
  • btn2 → btn1 바로 아래
  • btn3 → form 가로의 절반 위치에 고정