Open4

MayaでPySideの複数バージョンに対応したPythonスクリプトを作成する覚書き

DolphiiiinDolphiiiin

既存のPySide2で作成したPythonスクリプトをPySide6に移行する

PySide2からインポートしていいた箇所を、PySide6に変更します。

PySide2でQtをインポートするコード
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtUiTools import QUiLoader
Maya2025でPySide2をインポートするとエラーが発生
from PySide2.QtUiTools import QUiLoader
# エラー: ModuleNotFoundError: file <maya console> line 1: No module named 'PySide2'

インポートをPySide6からインポートするようにコードの修正が必要になります。

PySide6でQtをインポートするコード
from PySide6 import QtCore, QtGui, QtWidgets
from PySide6.QtUiTools import QUiLoader

問題点として、PySide6にコードを変更すると、同じコードではPySide2を使用する2024以前のMayaで使用するとエラーになるため、同じコードでバージョンをまたいでの仕様ができなくなります。

DolphiiiinDolphiiiin

PySide2とPySide6の両方に対応させる

https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=Qt6Migration

Mayaのヘルプドキュメントに、PySide2とPySIde6の両方に対応したコードのサンプルがあります。

PySide2とPySide6の両方に対応させるimport文の例(Mayaのドキュメントから引用)
try:
  from PySide6.QtCore import QObject, Qt
except ImportError:
  from PySide2.QtCore import QObject, Qt

try文で、どちらか片方がエラーでインポートできなかった場合に、もう片方のバージョンでインポートされるように分岐させるのがいいらしいです。

DolphiiiinDolphiiiin

QActionのモジュールのインポート元が変更された

PySide2で、UIのなかに、QActionを作成するときは、QtWidgets.QActionでアクセスすることができていました。PySide6では、QActionがQtGui.QActionに変更されました。
pyuic5でQtDesignerで作成したuiファイルから変換すると、PySide2での記法であるQtWidgets.QActionとして記述されます。

try:
    from PySide2 import QtCore, QtGui, QtWidgets
    qaction = QtWidgets.QAction
except ImportError:
    from PySide6 import QtCore, QtGui, QtWidgets
    qaction = QtGui.QAction

...
class ExampleWindow(QtWidgets.QMainWindow):
    def __init__(self):
        self.action = qaction("Action", self)

このように、インポートのtry文の中で、qactionという変数にQActionを読みこみ、UIの処理では、定義したqactionを呼び出して使用します。

ただ、pyuic5で生成されたコードに少しだけ手を加える必要があるのが厄介です。