maya
Maya UI 만들기
수색…
매개 변수
| 매개 변수 | 세부 |
|---|---|
| 전자 / 편집 | Maya에게 기존 속성의 값을 변경하려고합니다. |
| q / 질의 | Maya에게 기존 속성의 값을 가져오고 싶다고 말합니다. |
비고
Maya에는 윈도우, 레이아웃 및 다양한 컨트롤이 포함 된 매우 완벽한 UI 툴킷이 함께 제공됩니다. 이것은 C ++의 QT 프레임 워크를 사용하여 구현되지만 기본 Maya 명령 세트를 통해 MEL 및 Python 사용자에게 노출됩니다.
QT
고급 사용자는 C ++ 또는 Python을 사용하여 Maya UI를 확장 할 수 있습니다. 2012 년부터 2016 년까지의 Maya 버전은 Pyside 및 QT4를 사용합니다. Maya 2017은 Pyside2와 QT5를 사용합니다. 자세한 내용은 여기에
참고 : 웹에서의 이전 참조는 Maya GUI 툴킷을 "ELF"로 언급합니다. 그것은 여전히 정확한 이름이지만 거의 사용되지 않습니다.
기본 UI 예제 [Python]
Maya GUI 툴킷은 간단하고 긴급한 형태로 다양한 UI 요소를 생성합니다. GUI 위젯을 작성하고 편집하는 기본 명령이 있습니다. 위젯은 고유 한 문자열 이름으로 식별됩니다.
모든 gui 명령은 동일한 기본 형식을 취합니다. 위젯의 모양이나 동작을 지정하는 플래그와 함께 명령 유형과 작업하려는 객체의 문자열 이름을 제공합니다. 예를 들어 버튼을 만들려면 다음을 사용하십시오.
cmds.button('my_button', label = 'my label')
그러면 새로운 GUI 버튼이 생성됩니다. 당신과 같은 명령을 사용하려는 버튼을 편집하려면 edit 플래그 (짧은 버전은 그냥 e ). 그래서 다음과 같이 단추의 레이블을 변경할 수 있습니다.
cmds.button('my_button', e=True, label = 'a different label')
query 또는 q 플래그를 사용하여 속성의 현재 값을 쿼리 할 수 있습니다.
cmds.button(`my button`, q=True, label=True)
# 'a different label'
위젯 이름 지정
UI 명령으로 새 위젯을 만들 때 새 위젯에 표시 할 이름을 지정할 수 있습니다. 그러나 보증 하지 않습니다 : Maya는 당신이 요청한 이름을 버튼에 부여합니다 - 인식하지 못하는 문자를 주었거나 같은 이름의 위젯이 이미 있다면 다른 이름으로 되돌릴 수 있습니다. 놀라움을 방지하기 위해 만들어지는 때 항상 좋은 연습은 새로운 위젯의 이름을 캡처 :
my_button = cmds.button('my_button')
cmds.button(my_button, e=True, label = "a new label")
콜백 함수
많은 위젯에는 사용자가 위젯과 상호 작용할 때 콜백 함수를 실행할 수있는 이벤트가 포함됩니다. 예를 들어 버튼을 누르거나 확인란을 선택하거나 드롭 다운을 선택하면 기능이 실행됩니다.
이 이벤트와 관련된 정확한 플래그는 위젯에 따라 다르지만 일반적인 콜백은 다음과 같습니다.
def callback_fn(_ignore):
print "button pressed"
button = cmds.button(label='press me', command = callback_fn)
버튼을 누르면 "버튼을 누른 상태"가 청취자 창에 인쇄됩니다. 대부분의 위젯은 콜백이 활성화 될 때 몇 가지 인수를 발생시킵니다. 예를 들어 button 에는 항상 부울 값이 포함되어 있으므로 사용중인 위젯과 함께 갈 콜백 핸들러에 올바른 서명이 있는지 확인해야합니다. 그것이 callback_fn() 이 필요하지 않더라도 인자를 취하는 이유입니다.
콜백 할당
Maya는 콜백 함수를 첨부하는 두 가지 방법을 지원한다.
# this works, but is not a great idea
cmds.button(label = 'string reference', command = 'string_name_of_function')
# use this form whenever possible
cmds.button(label = 'direct function reference', command = callback_fn)
첫 번째 예제에서 콜백은 문자열 값에 의해 지정됩니다. Maya는 글로벌 파이썬 스코프에서 콜백을 발견 할 것입니다. 이것은 보통 제대로 구성된 코드를 작성할 때 접근하기가 어렵습니다. 문자열 이름 콜백도 해결하기가 더 느립니다. 두 번째 예제는 실제 파이썬 함수를 콜백에 전달합니다.이 형식이 더 빠르며 콜백 함수에 유효한 함수를 제공하지 못했을 때 대신 UI가 생성 된 시점을 알 수 있습니다. UI 위젯이 실제로 사용됩니다.
콜백 함수에 인수 값을 전달하려면 콜백에 람다 , 클로저 또는 functools.partial 바인드 인수를 사용할 수 있습니다.
partial 사용 :
from functools import partial
....
def callback_fn(myValue, _ignore): # _ignore swallows the original button argument
print myValue
button = cmds.button(label='press me', command = partial(callback_fn, "fooo"))
lambda 사용하기 :
def callback_fn(myValue):
print myValue
button = cmds.button(label='press me', command = lambda _ignore: callback_fn("fooo"))
# here the lambda needs to handle the button argument
클로저 사용
b = cmds.button(label = 'press me')
# by defining this function when `b` exists, we can use it later
# without storing it explicitly
def get_button_label(*_):
print "label of button", b, " is ", cmds.button(b, q=True, l=True)
cmds.button(b, e=True, c=get_button_label)
문자열 콜백 이름 대 콜백 함수에 대한 자세한 내용은 여기에 있습니다.
창 만들기
# create a window with a button that closes the window when clicked
window = cmds.window(title='example window') # create the window
layout = cmds.columnLayout(adjustableColumn=True) # add a vertical layout
def close_window(*_):
cmds.deleteUI(window) # deletes the window above
button = cmds.button(label= 'press to close", command = close_window)
# show the window
cmds.showWindow(window)
람다와 루프
람다는 GUI 요소에 동작을 연결하는 유용한 바로 가기입니다.
b = cmds.button("make a cube", command = lambda _: cmds.polyCube())
그러나 파이썬이 람다 내부에서 변수를 포착하는 방식 때문에 루프 내에서 lambdas를 사용하여 명령을 바인드하면 예기치 않은 결과가 발생할 수 있습니다. 예를 들어 다양한 크기의 구체를 만드는 버튼을 생성해야하는 것처럼 보입니다 .
# warning: doesn't work like it looks!
for n in range(5):
b = cmds.button("sphere size %i" % n, command = lambda _: cmds.polySphere(radius=n))
버튼은 올바르게 레이블링되지만 루프가 닫힐 때 람다가 모두 해당 값을 캡처하므로 모두 동일한 반경 (4)을 사용합니다. TLDR : 루프 내부에서 콜백을 생성하는 경우 functools.partial 또는 다른 값 캡처 방법을 사용하십시오.이 응용 프로그램에서는 lambda가 작동하지 않습니다. 자세한 내용은 여기 를 참조하십시오.