maya 명령을 사용하여 GUI를 작성하는 방법
소개
maya로 도구를 만들 때 도구 용 GUI를 만들 수 있습니다.
MEL로 만들 때는 MEL 명령을 사용하여
Python으로 만드는 경우는 PySide를 사용하거나 maya.cmds나 pymel에서 MEL을 호출하여 만드는 느낌인지 생각합니다.
트위터라든지 보고 있으면 Python으로 쓸 경우는 PySide를 사용하는 사람이 많습니까.
이번에는 틈새 레이어를 목표로 maya.cmds를 사용하여 GUI를 만들 때
with 구문과
LayoutManager
를 사용하면 편리해! 라는 것을 소개합니다.GUI 예제(MEL)
maya.cmds를 사용한 예를 설명하기 전에 MEL로 만들면 예를 들면 다음과 같습니다.
global proc testWindow()
{
//既にGUIが存在する時に古いほうを消す処理
if(`window -ex testWindow`) deleteUI testWindow;
string $windowName = `window -title "testWindow" testWindow`;
//GUIを作成
string $tabTest = `tabLayout -innerMarginWidth 1 -innerMarginHeight 5 -scrollable false`;
string $tabTestColumn =`columnLayout -adj true -rowSpacing 10`;
button -label "TestButton";
button -label "TestButton";
textField -tx "TestTextField" -w 500;
rowLayout -numberOfColumns 4 -columnWidth4 100 150 150 150 -columnAttach4 left left left left;
button -label "TestButton";
checkBox -label "TestCheckBox";
checkBox -label "TestCheckBox";
checkBox -label "TestCheckBox";
setParent..;
text -label "TestText";
textField -tx "TestTextField" -w 500;
setParent..;
tabLayout -edit -tabLabel $tabTestColumn "Test" $tabTest;
//GUIを表示
showWindow;
}
testWindow()
위의 MEL을 실행하면 이런 느낌의 GUI가 시작됩니다.
코드에서 GUI를 만드는 부분을 색으로 구분해 봅니다.
가장 큰 빨간색 테두리가 columnLayout이고 (요소를 세로로 정렬하는 레이아웃입니다)
파란색 테두리에서 columnLayout 내에 button과 textField를 위에서 순서대로 배치합니다.
녹색 테두리는 한 줄 안에 button과 checkBox 3개를 배치하고 있습니다.
MEL로 작성하는 경우 GUI 레이아웃의 계층 구조에 따라 들여 쓰기를 변경하면
코드를 쉽게 볼 수 있습니다.
GUI 예제(maya.cmds)
다음은 maya.cmds가 작성한 예입니다.
# !/usr/bin/env python
# -*- coding: utf-8 -*-
import maya.cmds as cmds
def testWindow():
#既にGUIが存在する時に古いほうを消す処理
if cmds.window('testWindow', ex=1):
cmds.deleteUI('testWindow')
windowName = cmds.window('testWindow',title='testWindow')
#GUIを作成
tabTest=cmds.tabLayout(scrollable=False, innerMarginHeight=5, innerMarginWidth=1)
tabTestColumn=cmds.columnLayout(adj=True, rowSpacing=10)
cmds.button(label="TestButton")
cmds.button(label="TestButton")
cmds.textField(w=500, tx="TestTextField")
cmds.rowLayout(numberOfColumns=4, columnAttach4=('left', 'left', 'left', 'left'), columnWidth4=(100, 150, 150, 150))
cmds.button(label="TestButton")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.setParent('..')
cmds.text(label="TestText")
cmds.textField(w=500, tx="TestTextField")
cmds.setParent('..')
cmds.tabLayout(tabTest, edit=1, tabLabel=(tabTestColumn, "Test"))
#GUIを表示
cmds.showWindow()
if __name__ == '__main__':
testWindow()
maya.cmds의 경우 (마침내 python의 경우) 들여 쓰기가 어긋나면 오류가 발생하기 때문에
레이아웃의 계층에 맞게 들여 쓰기를 변경할 수 없습니다.
한층 더 말하면
cmds.setParent('..')
도 몇번이나 나오므로 지우고 싶은 곳입니다. . .그래서 여기에서 이번 본제입니다!
with 구문과 LayoutManager 사용
with 구문과 maya 안에 디폴트인
LayoutManager
라는 모듈을 조합해 사용합니다.with 구문은 주로 파일을 열고 닫을 때 사용하는 것입니다.
with를 사용하지 않으면 ↓처럼 씁니다.
f = open("test.txt", "r")
print(f.read())
f.close()
with를 사용하면
f.close()
부분을 생략 할 수 있습니다.게다가 편리하게도 with 문장 아래의 행은 들여쓰기를 비우는 결정이 되어 있습니다.
with open("test.txt", "r") as f:
print(f.read())
LayoutManager
는 with 구문의 이러한 구조를 이용하여들여쓰기를 자유롭게 바꿀 수 있는 모듈입니다.
maya.common.ui의 라이브러리에 포함되어 있으므로 아래와 같이 가져옵니다.
from maya.common.ui import LayoutManager
LayoutManager
를 사용하여 maya.cmds 를 사용한 GUI 예제를 다시 작성하면 다음과 같습니다.# !/usr/bin/env python
# -*- coding: utf-8 -*-
import maya.cmds as cmds
from maya.common.ui import LayoutManager
def testWindow():
#既にGUIが存在する時に古いほうを消す処理
if cmds.window('testWindow', ex=1):
cmds.deleteUI('testWindow')
windowName = cmds.window('testWindow',title='testWindow')
#GUIを作成
tabTest=cmds.tabLayout(scrollable=False, innerMarginHeight=5, innerMarginWidth=1)
with LayoutManager(cmds.columnLayout(adj=True, rowSpacing=10)) as tabTestColumn:
cmds.button(label="TestButton")
cmds.button(label="TestButton")
cmds.textField(w=500, tx="TestTextField")
with LayoutManager(cmds.rowLayout(numberOfColumns=4, columnAttach4=('left', 'left', 'left', 'left'), columnWidth4=(100, 150, 150, 150))):
cmds.button(label="TestButton")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.checkBox(label="TestCheckBox")
cmds.text(label="TestText")
cmds.textField(w=500, tx="TestTextField")
cmds.tabLayout(tabTest, edit=1, tabLabel=(tabTestColumn, "Test"))
#GUIを表示
cmds.showWindow()
if __name__ == '__main__':
testWindow()
들여 쓰기의 위치를 변경 한 것과
cmds.setParent('..')
사라졌기 때문에 조금 보기 쉬워졌습니다!결론
PySide를 사용하기 때문에 필요하지 않습니다.
라고 생각한 분도 있을지도 모릅니다만
인터넷에서 검색해도
LayoutManager
나오지 않았기 때문에 소개하겠습니다.그렇게 편리한 기능은 아니지만 좋으면 사용해보세요!
Reference
이 문제에 관하여(maya 명령을 사용하여 GUI를 작성하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lie_871221/items/1b6ef8faba06e5180cf9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)