水深1mm

広く浅い個人的メモ。

Maya 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
  • UiData.py
    • UiData.uiをpythonに変換したもの
  • ui/UiData.ui
    • QtDesignerで作成したUI情報
  • ui/ui2py.py.ui
    • uiファイルをpyファイルに変換するスクリプト
    • uiファイルをこのファイルにドロップすると一階層上にpy出力
実行方法
  • Mayaのスクリプトパスが通っているフォルダ(Document/maya/scriptsとか)に
    UiSampleScriptフォルダごとコピー

  • Mayaを起動しスクリプトエディタ(Python)で以下を入力して実行

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

使い方

f:id:bonbonbe:20150419180936p:plain

作成が終わったら保存したデータをui2py.pyにドロップしてpythonに変換する