PySide を使用してウインドウを作る場合、Mayaの子に自分のウインドウをペアレント化する必要があります!
大体の場合、shibokenを使って以下のようなコードでやられているかと思います。
from maya import OpenMayaUI from PySide import QtGui import shiboken class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None, flags=None): if parent is None: mainWindowPtr = OpenMayaUI.MQtUtil.mainWindow() parent = shiboken.wrapInstance(long(mainWindowPtr), QtGui.QWidget) super(MainWindow, self).__init__(parent, flags) window = MainWindow() window.show()
Maya2015以降からは、を使う新しい方法でやることができます!しかも、Maya的な初期化をしてくれて、ウィジェットを自動的に命名して、文字列として 見つけられるようにもしてくれます!(*´ω`*)
使い方はとっても簡単で、「MayaQWidgetBaseMixin」を左側に継承するだけです!
from maya.app.general import mayaMixin from PySide import QtGui class MainWindow(mayaMixin.MayaQWidgetBaseMixin, QtGui.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) window = MainWindow() window.show()
from maya.app.general import mayaMixin from PySide2 import QtWidgets class MainWindow(mayaMixin.MayaQWidgetBaseMixin, QtWidgets.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) window = MainWindow() window.show()
こうして見比べてみると、Importが減って、コードの処理もスマートになりました!継承を使うとイイネ!っというイイ例ですね(*´ω`*)b
ただ、、、
名前が長い(;´∀`)
こんなの、僕にはとっても
覚えられまてん(*´ω`*)
もうちょっと使い勝手をよくするには、「widgets.py」というライブラリを作るといいかもしれません!
from maya.app.general import mayaMixin from PySide import QtGui class MainWindow(mayaMixin.MayaQWidgetBaseMixin, QtGui.QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs)
カスタマイズしたウィジェットを作成しておいて、、、
from PySide import QtGui import widgets class MainWindow(widgets.MainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) window = MainWindow() window.show()
ツールを作る時は、カスタマイズしたウィジェットを元にウインドウを作る流れです!
これなら、覚えにくいモジュール名も、長いクラス名を覚えなくてもバッチリです∠( ゚д゚)/
ただ最初にも書きましたが、この方法はMaya2014では使えません、、、(´;ω;`)Maya2018がリリースされたら、この方法に切り替えて行きたいと思っています!
Maya2015以降しか使わないよ!っというなら、ガシガシ使って見てください!!(`・ω・´)ゞ