Maya PySide まとめ
開発環境
Windows8
Maya2015(一応ファイルに2014バージョンも追記)PySide reference
http://pyside.github.io/docs/pyside/
準備
- 公式サイトからpython2.7インストール
- C:\Python27とC:\Python27\Scriptsを環境変数のPathに追加
- コマンドラインからPySideインストール
pip install PySide
ファイル
(12/12追記)MayaQWidgetBaseMixin追加 https://drive.google.com/file/d/0B4fmLEFqtND0SnlEWDhTNkZrTWM/view?usp=sharing
UiSampleScript
│ UiData.py
│ UiSample.py
│ __init__.py
├─.idea
└─ui
ui2py.py
UiData.ui
※ .ideaフォルダはPyCharmのプロジェクトファイル
- __init__.py
- パッケージとして読み込むために必要
- UiSample.py
- Mainとなるスクリプトファイル
- UiData.py
- UiData.uiをpythonに変換したもの
- ui/UiData.ui
- QtDesignerで作成したUI情報
- ui/ui2py.py.ui
- uiファイルをpyファイルに変換するスクリプト
- uiファイルをこのファイルにドロップすると一階層上にpy出力
実行方法
Mayaのスクリプトパスが通っているフォルダ(Document/maya/scriptsとか)に
UiSampleScriptフォルダごとコピー
from UiSampleScript import UiSample UiSample.MainWindow().show()
プログラムについて
Maya2014と2015で若干違うので注意する
パッと見た感じではMayaQWidgetBaseMixinで2014と同じことをやっているようだったので
たぶん2014の方法で2015も大丈夫(未検証)
(12/12追記)MayaQWidgetBaseMixinをimportだけして使ってなかった。
# -*- coding: utf-8 -*- import os import sys from PySide import QtCore, QtGui from UiData import Ui_UiSample_MainWindow # Maya2015 ver from maya.app.general.mayaMixin import MayaQWidgetBaseMixin # Maya2014 ver # def get_maya_window(): # from maya.OpenMayaUI as omui # from shiboken import wrapInstance # return wrapInstance(long(omui.MQtUtil.mainWindow()), QtGui.QWidget) class MainWindow(MayaQWidgetBaseMixin, QtGui.QMainWindow): def __init__(self, parent=None): # Maya2015 ver super(MainWindow, self).__init__(parent) self.__ui = Ui_UiSample_MainWindow() self.__ui.setupUi(self) # Maya2014 ver # super(MainWindow, self).__init__(get_maya_window()) # self.__ui = Ui_UiSample_MainWindow() # self.__ui.setupUi(self) self.__ui.pushButton_1.clicked.connect(self._on_clicked_btn_1) self.__ui.pushButton_2.clicked.connect(self._on_clicked_btn_2) self.__ui.pushButton_3.clicked.connect(self._on_clicked_btn_3) pass def _on_clicked_btn_1(self): print 'pushed PushButton_1' pass def _on_clicked_btn_2(self): print 'pushed PushButton_2' pass def _on_clicked_btn_3(self): print 'pushed PushButton_3' pass if __name__ == '__main__': ui = MainWindow().show()
Signal/Slotについて
https://wiki.qt.io/Signals_and_Slots_in_PySide_Japanese
self.__ui.pushButton_1.clicked.connect(self._on_clicked_btn_1) self.__ui.pushButton_2.clicked.connect(self._on_clicked_btn_2) self.__ui.pushButton_3.clicked.connect(self._on_clicked_btn_3)
ボタンをクリックしたときの処理を設定している
GUIの作成方法
- QtDesignerを起動する
C:\Program Files\Autodesk\Maya2015\bin\designer.exe
使い方
作成が終わったら保存したデータをui2py.pyにドロップしてpythonに変換する