新!Mayaウインドウの親子関係MayaQWidgetBaseMixin!




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以降しか使わないよ!っというなら、ガシガシ使って見てください!!(`・ω・´)ゞ