Maya2017・2016の両方で動作するUIについて
Maya2016のスクリプトをMaya2017で動作するような対応を行った。
作業環境
- Window7 64bit
- Maya2017
動作確認を行ったスクリプトについて
- Maya2016で動作済み
- QtDesignderで作成した.uiファイルを.pyに変換して使用
- QtDesignder上でのSignal・Slotの設定は無し
- 直接のShibokenは無し
対応方法
Documents/maya/2017/scripts
にuserSetup.pyを作成して(すでに存在する場合は先頭に)
以下を記述する。
# -*- coding: utf-8 -*- import sys import PySide2 import PySide2.QtWidgets sys.modules['PySide'] = PySide2 import PySide.QtGui for key, value in PySide2.QtWidgets.__dict__.items(): setattr(sys.modules['PySide.QtGui'], key, value) setattr(PySide.QtGui.QApplication, 'UnicodeUTF8', -1)
PySide2をPySideとしてimportできるようするために参照を渡し、PySide.QtGuiには
PySide2.QtWidgets以下のクラスをアトリビュートとして追加している。
最後にその他の不足していた参照を後述の方法で検証し追加した。
この処理を追加すると、以降は見た目PySide・中身PySide2というような状態のモジュールを
importできるようになるので、Maya2016で動作していたスクリプトの変更を一切行わずに
Maya2017に対応できる。.uiを変換した.pyもそのまま。やったぜ。
Mayaウィンドウの後ろに行かないようにするための処理についてはshibokenではなく
MayaQWidgetBaseMixin
を使用していたためshiboken2の対応は必要ない状態だったので書いていないが、
同じような処理をuserSetup.pyに追加すればいけそうな気がする。
不足していた参照の追加
上記のスクリプト追加後の実行時に.uiファイルを変換した.pyファイル内部で
PySideに関するエラーが発生した場合には、
setattr(PySide.QtGui.QApplication, 'UnicodeUTF8', -1)
という形で参照を追加する必要がある。
Google先生に聞いてみてもPySide2のリファレンス的なものが見つからなかったので
元の.uiファイルをPySide2対応の.pyに一度変換してPySide(無印)と比較することでどのような値を
追加すればよいかの確認を行った。
変換方法
(作業環境ではないためあやふや。Maya2017はProgramFiles/Autodeskのヤツ。)
Maya2017/bin/mayapy.exe Maya2017/bin/pyside2-uic 対象の.uiファイル > 出力先.pyファイル
自作したスクリプトの処理部分でPySideのエラーが発生した場合の対応は不明。
PyCharm師匠にmayapy.exeのパス設定したらPySide2のHinting出してくれたりしないかな?