pyside : MEventMessage를 사용한 callback
매우 죄송하지만 참가하겠습니다.
maya상에서 상태가 천이했을 때에 어떠한 처리를 실행하고 싶은 경우
scriptJob이 클래식하지만 더 간단하고 가벼운 OpenMaya.MEventMessage를 사용해보십시오.
이번에는 pysideGUI에서 사용하는 방법에 대해 간단히 써 보았습니다.
선택한 노드의 유형을 보고 레이블의 문자를 변경해 봅시다.
샘플 코드
mesh를 가지는 변환 노드를 선택했을 경우의 처리와, 다른 타입이 선택되었을 경우의 처리,
아무것도 선택되어 있지 않은 경우의 처리, 각각 다른 label text를 표시시킵니다.
import pymel.core as pm
import maya.api.OpenMaya as om
from PySide2 import QtGui, QtWidgets, QtCore
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
class TestGUI(MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
windowName = 'testGUI'
def __init__(self, parent=None):
super(TestGUI, self).__init__(parent)
if pm.window(self.windowName, q=1, ex=1):
pm.deleteUI(self.windowName)
#window settings
self.setObjectName(self.windowName)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setAttribute(QtCore.Qt.WA_AlwaysShowToolTips)
self.setWindowTitle(self.windowName)
self.setWindowFlags(QtCore.Qt.Window)
self.initUI()
self.setCentralWidget(self.mainWidget)
self.connectCallback()
def initUI(self):
#UI初期設定
self.mainWidget = QtWidgets.QWidget()
main_vBoxLayout = QtWidgets.QVBoxLayout()
self.mainWidget.setLayout(main_vBoxLayout)
self.main_lbl = QtWidgets.QLabel('Select Mesh.')
main_vBoxLayout.addWidget(self.main_lbl, alignment=QtCore.Qt.AlignCenter)
def closeEvent(self, event):
#ウィンドウを閉じる際にcallbackを破棄
om.MMessage.removeCallback(self.callback)
def connectCallback(self):
#callback作成
self.callback = om.MEventMessage.addEventCallback('SelectionChanged', self.changeLabel)
def changeLabel(self, *args, **kwargs):
#選択したノードのタイプを判別してテキストを変更
try:
node = pm.selected()[0]
if pm.nodeType(node.getShape()) == 'mesh':
self.main_lbl.setText('Ready.')
elif not pm.nodeType(node.getShape()) == 'mesh':
self.main_lbl.setText('Must select mesh.')
else:
self.main_lbl.setText('Select Mesh.')
except:
node = None
self.main_lbl.setText('Select Mesh.')
if __name__ == '__main__':
gui = TestGUI()
gui.show()
실행 결과
텍스트뿐만 아니라 다양한 widget의 상태 전환도 할 수 있네요.
짧은 내용이었지만 보아 주셔서 감사합니다.
Reference
이 문제에 관하여(pyside : MEventMessage를 사용한 callback), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zebraed/items/5b01b799d5f37a14b6d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)