【Maya Python】 QtDesigner로 만든 .ui를 Maya로 표시
9083 단어 QtDesigner파이썬pyside2maya
소개
【Maya Python】 스크립트의 내용을 씹는 1 , 2 , 3 으로 쓴 스크립트를 작성하는 방법은 작은 스크립트에서는 문제가 되지 않지만 복잡한 UI를 만들려고 하면 힘든 노력이 필요합니다.
그래서 QtDesigner 을 사용하여 UI를 조립해 보겠습니다.
CG 아티스트로서는 스크립트로 고민하는 것보다 이런 알기 쉬운 툴이 있으면 좋네요.
이번에는 우선 만져보고 느낌을 잡기 위해 Maya에서 UI를 표시하고 간단한 동작을 시키는 곳까지 만들고 싶습니다.
PySide와 PySide2, PyQt5 등의 방법이 산견되고 있으므로 자신의 비망록도 겸해 씁니다.
운영 환경은 Maya2019,2020입니다.
UI 파일 준비
우선 이런 느낌으로 UI를 만들어 보았습니다.
만드는 방법에 대해서는 이 사이트를 참고.
PyQt5와 python3을 통한 GUI 프로그래밍 : 연습편 [0]
제5장 Qt Designer를 사용해 보자
QtDesigner로 UI 만들기
조금 막힌 곳을 메모
레이아웃 설정을 단단히 수행
그대로 배치했을 뿐이라면, 윈도우 사이즈를 변경해도 UI가 추종해 주지 않거나, 윈도우 시작시에 윈도우가 너무 작다 등 일어나 버린다.
그림과 같이 centralwidget이 brakeLayout이 되어 있으면 전부 표시해주지 않는다.
레이아웃을 설정하고 윈도우 크기를 조정한 후 Size Constraints에서 최소 크기를 설정합니다. 그러면 제대로 맞은 상태의 창을 만들 수 있다. 윈도우 사이즈를 변경해도 UI가 추종해 준다.
레이아웃 설정 후 초기 시작시 다이어그램
창을 표시하는 프로그램 준비
일단 코드 전문
# -*- coding: utf-8 -*-
from PySide2 import QtWidgets
from PySide2.QtUiTools import QUiLoader
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
# パスを直接指定
UIFILEPATH = 'C:/Users/YN/Desktop/testUI.ui'
## MainWindowを作るクラス
class MainWindow(MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
# UIのパスを指定
self.UI = QUiLoader().load(UIFILEPATH)
# ウィンドウタイトルをUIから取得
self.setWindowTitle(self.UI.windowTitle())
# ウィジェットをセンターに配置
self.setCentralWidget(self.UI)
# ボタンを接続
self.UI.refreshPushButton.clicked.connect(self.refreshPushButton)
def refreshPushButton(self):
print ('refresh')
## MainWindowの起動
def main():
window = MainWindow()
window.show()
if __name__ == '__main__':
main()
스크립트 편집기에 복사하여,UIFILEPATH
를 방금 만든 ui의 경로로 설정합니다.
그리고 실행하면 일단 작성한 UI를 Maya에서 확인할 수 있습니다.
프로그램 상세
UI 로드
from PySide2.QtUiTools import QUiLoader
UI를 로드하려면 QtUiTools
에서 QUiLoader
를 가져옵니다.
self.UI = QUiLoader().load(UIFILEPATH)
UIFILEPATH
를 로드하고 self.UI
로 인스턴스화합니다.
UI에서 값 가져오기
self.setWindowTitle(self.UI.windowTitle())
윈도우 타이틀을 지정하지 않으면 적당한 이름으로 윈도우가 작성되기 때문에 윈도우 타이틀을 작성한 UI 파일로부터 취득합니다. 물론 여기에 string
로 입력하는 것도 가능합니다.self.UI.windowTitle()
UI 안의 프로퍼티명을 지정하면 거기에 설정되어 있는 값을 취득할 수 있습니다.
이와 같이 설정해 두면 프로그램으로 재작성하지 않아도 UI 파일을 변경하면 좋기 때문에 편리합니다.
UI 배치
self.setCentralWidget(self.UI)
UI를 배치합니다.
버튼 동작 만들기
self.UI.refreshPushButton.clicked.connect(self.refreshPushButton)
objectName이 refreshPushButton
인 버튼에 클릭할 때 기능을 연결합니다.
이와 같이 QtDesigner로 오브젝트명을 지정해 둡니다.
def refreshPushButton(self):
print ('refresh')
버튼을 눌렀을 때, refresh와 프린트하는 기능을 붙였습니다.
실제로는 여기에 이 버튼에 설정하고 싶은 기능을 써 갑니다.
결론
저도, 처음은 어디에서 손을 붙이면 좋을지 암중 모색 상태였으므로, 뭔가 도움이 된다고 생각합니다.
Maya에서 우선 바삭바삭하게 UI 표시해 아-, 이렇게 되어 있는 것이라는 것을 알고 있으면 자꾸자꾸 UI를 복잡하게 해 갈 수 있지 않을까요.
Maya의 PySide2는 도중에 PySide에서 업데이트가 있었고, 설명의 방식이 바뀌었기 때문에 혼란했습니다. 또한 비슷한 PyQt5 등 검색에 히트 해 버리기 때문에 더욱 다소 네요. .
참고
매우 참고가 되었습니다. 감사합니다.
PyQt5와 python3을 통한 GUI 프로그래밍 : 연습편 [0]
제5장 Qt Designer를 사용해 보자
QtDesigner로 UI 만들기
Reference
이 문제에 관하여(【Maya Python】 QtDesigner로 만든 .ui를 Maya로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/elloneil/items/7d2ab808b5cf3f2d9707
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 이런 느낌으로 UI를 만들어 보았습니다.
만드는 방법에 대해서는 이 사이트를 참고.
PyQt5와 python3을 통한 GUI 프로그래밍 : 연습편 [0]
제5장 Qt Designer를 사용해 보자
QtDesigner로 UI 만들기
조금 막힌 곳을 메모
레이아웃 설정을 단단히 수행
그대로 배치했을 뿐이라면, 윈도우 사이즈를 변경해도 UI가 추종해 주지 않거나, 윈도우 시작시에 윈도우가 너무 작다 등 일어나 버린다.
그림과 같이 centralwidget이 brakeLayout이 되어 있으면 전부 표시해주지 않는다.
레이아웃을 설정하고 윈도우 크기를 조정한 후 Size Constraints에서 최소 크기를 설정합니다. 그러면 제대로 맞은 상태의 창을 만들 수 있다. 윈도우 사이즈를 변경해도 UI가 추종해 준다.
레이아웃 설정 후 초기 시작시 다이어그램
창을 표시하는 프로그램 준비
일단 코드 전문
# -*- coding: utf-8 -*-
from PySide2 import QtWidgets
from PySide2.QtUiTools import QUiLoader
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
# パスを直接指定
UIFILEPATH = 'C:/Users/YN/Desktop/testUI.ui'
## MainWindowを作るクラス
class MainWindow(MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
# UIのパスを指定
self.UI = QUiLoader().load(UIFILEPATH)
# ウィンドウタイトルをUIから取得
self.setWindowTitle(self.UI.windowTitle())
# ウィジェットをセンターに配置
self.setCentralWidget(self.UI)
# ボタンを接続
self.UI.refreshPushButton.clicked.connect(self.refreshPushButton)
def refreshPushButton(self):
print ('refresh')
## MainWindowの起動
def main():
window = MainWindow()
window.show()
if __name__ == '__main__':
main()
스크립트 편집기에 복사하여,UIFILEPATH
를 방금 만든 ui의 경로로 설정합니다.
그리고 실행하면 일단 작성한 UI를 Maya에서 확인할 수 있습니다.
프로그램 상세
UI 로드
from PySide2.QtUiTools import QUiLoader
UI를 로드하려면 QtUiTools
에서 QUiLoader
를 가져옵니다.
self.UI = QUiLoader().load(UIFILEPATH)
UIFILEPATH
를 로드하고 self.UI
로 인스턴스화합니다.
UI에서 값 가져오기
self.setWindowTitle(self.UI.windowTitle())
윈도우 타이틀을 지정하지 않으면 적당한 이름으로 윈도우가 작성되기 때문에 윈도우 타이틀을 작성한 UI 파일로부터 취득합니다. 물론 여기에 string
로 입력하는 것도 가능합니다.self.UI.windowTitle()
UI 안의 프로퍼티명을 지정하면 거기에 설정되어 있는 값을 취득할 수 있습니다.
이와 같이 설정해 두면 프로그램으로 재작성하지 않아도 UI 파일을 변경하면 좋기 때문에 편리합니다.
UI 배치
self.setCentralWidget(self.UI)
UI를 배치합니다.
버튼 동작 만들기
self.UI.refreshPushButton.clicked.connect(self.refreshPushButton)
objectName이 refreshPushButton
인 버튼에 클릭할 때 기능을 연결합니다.
이와 같이 QtDesigner로 오브젝트명을 지정해 둡니다.
def refreshPushButton(self):
print ('refresh')
버튼을 눌렀을 때, refresh와 프린트하는 기능을 붙였습니다.
실제로는 여기에 이 버튼에 설정하고 싶은 기능을 써 갑니다.
결론
저도, 처음은 어디에서 손을 붙이면 좋을지 암중 모색 상태였으므로, 뭔가 도움이 된다고 생각합니다.
Maya에서 우선 바삭바삭하게 UI 표시해 아-, 이렇게 되어 있는 것이라는 것을 알고 있으면 자꾸자꾸 UI를 복잡하게 해 갈 수 있지 않을까요.
Maya의 PySide2는 도중에 PySide에서 업데이트가 있었고, 설명의 방식이 바뀌었기 때문에 혼란했습니다. 또한 비슷한 PyQt5 등 검색에 히트 해 버리기 때문에 더욱 다소 네요. .
참고
매우 참고가 되었습니다. 감사합니다.
PyQt5와 python3을 통한 GUI 프로그래밍 : 연습편 [0]
제5장 Qt Designer를 사용해 보자
QtDesigner로 UI 만들기
Reference
이 문제에 관하여(【Maya Python】 QtDesigner로 만든 .ui를 Maya로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/elloneil/items/7d2ab808b5cf3f2d9707
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: utf-8 -*-
from PySide2 import QtWidgets
from PySide2.QtUiTools import QUiLoader
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
# パスを直接指定
UIFILEPATH = 'C:/Users/YN/Desktop/testUI.ui'
## MainWindowを作るクラス
class MainWindow(MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
# UIのパスを指定
self.UI = QUiLoader().load(UIFILEPATH)
# ウィンドウタイトルをUIから取得
self.setWindowTitle(self.UI.windowTitle())
# ウィジェットをセンターに配置
self.setCentralWidget(self.UI)
# ボタンを接続
self.UI.refreshPushButton.clicked.connect(self.refreshPushButton)
def refreshPushButton(self):
print ('refresh')
## MainWindowの起動
def main():
window = MainWindow()
window.show()
if __name__ == '__main__':
main()
UI 로드
from PySide2.QtUiTools import QUiLoader
UI를 로드하려면 QtUiTools
에서 QUiLoader
를 가져옵니다.self.UI = QUiLoader().load(UIFILEPATH)
UIFILEPATH
를 로드하고 self.UI
로 인스턴스화합니다.UI에서 값 가져오기
self.setWindowTitle(self.UI.windowTitle())
윈도우 타이틀을 지정하지 않으면 적당한 이름으로 윈도우가 작성되기 때문에 윈도우 타이틀을 작성한 UI 파일로부터 취득합니다. 물론 여기에 string
로 입력하는 것도 가능합니다.self.UI.windowTitle()
UI 안의 프로퍼티명을 지정하면 거기에 설정되어 있는 값을 취득할 수 있습니다.이와 같이 설정해 두면 프로그램으로 재작성하지 않아도 UI 파일을 변경하면 좋기 때문에 편리합니다.
UI 배치
self.setCentralWidget(self.UI)
UI를 배치합니다.버튼 동작 만들기
self.UI.refreshPushButton.clicked.connect(self.refreshPushButton)
objectName이 refreshPushButton
인 버튼에 클릭할 때 기능을 연결합니다.이와 같이 QtDesigner로 오브젝트명을 지정해 둡니다.
def refreshPushButton(self):
print ('refresh')
버튼을 눌렀을 때, refresh와 프린트하는 기능을 붙였습니다.
실제로는 여기에 이 버튼에 설정하고 싶은 기능을 써 갑니다.
결론
저도, 처음은 어디에서 손을 붙이면 좋을지 암중 모색 상태였으므로, 뭔가 도움이 된다고 생각합니다.
Maya에서 우선 바삭바삭하게 UI 표시해 아-, 이렇게 되어 있는 것이라는 것을 알고 있으면 자꾸자꾸 UI를 복잡하게 해 갈 수 있지 않을까요.
Maya의 PySide2는 도중에 PySide에서 업데이트가 있었고, 설명의 방식이 바뀌었기 때문에 혼란했습니다. 또한 비슷한 PyQt5 등 검색에 히트 해 버리기 때문에 더욱 다소 네요. .
참고
매우 참고가 되었습니다. 감사합니다.
PyQt5와 python3을 통한 GUI 프로그래밍 : 연습편 [0]
제5장 Qt Designer를 사용해 보자
QtDesigner로 UI 만들기
Reference
이 문제에 관하여(【Maya Python】 QtDesigner로 만든 .ui를 Maya로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/elloneil/items/7d2ab808b5cf3f2d9707
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
매우 참고가 되었습니다. 감사합니다.
PyQt5와 python3을 통한 GUI 프로그래밍 : 연습편 [0]
제5장 Qt Designer를 사용해 보자
QtDesigner로 UI 만들기
Reference
이 문제에 관하여(【Maya Python】 QtDesigner로 만든 .ui를 Maya로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/elloneil/items/7d2ab808b5cf3f2d9707텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)