同じコードでPySideとPySide2を使えないものか




Maya2017もリリースされて、はや1年がたとうとしておりますが、ぼちぼちツールもMaya2017に対応させていこうかと考えております。

そこで問題になるのが、、、

「PySideからPySide2への移行」

Qt4からQt5に変更された余波ですね。。。単に名前が変わるだけならいいのですが、UIのモジュールがQtGuiからQtWidgetsに変わったり色々めんどくさい(;´∀`)

ツールを「Maya2017版」と「Maya2014-2016版」の2つにするのもアレだし、アチラコチラに「if文」を使って分岐させるのもアレだし、、、

なんとかなりませんか、、、(切実)

そういえば!

Susanooを作っている時はQtCreatorを使って、C++でQtを使用していたのですがネームスペースなしで「QMainWindow」と、QtのClassを使っていました。

っということは、、、

QtのClassは名前が重複していない!?┏(✦ω✦ ┓)┓

ものは試しに

Pythonの伝家の宝刀「from import *」を使って、PySideのモジュールを展開してしまえば、QtCreatorの時のようにできるのではないかっと、こんなんでいいのだろうか、、、っと恐る恐るやってみました。

「PySideWrap.py」というラッパーを用意して、コードは以下の通りです。

# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# PySide Wrapper
#-------------------------------------------------------------------------------
try:
	# Check import PySide
	from PySide.QtCore import *
	from PySide.QtDeclarative import *
	from PySide.QtGui import *
	from PySide.QtHelp import *
	from PySide.QtMultimedia import *
	from PySide.QtNetwork import *
	from PySide.QtOpenGL import *
	from PySide.QtScript import *
	from PySide.QtScriptTools import *
	from PySide.QtSql import *
	from PySide.QtSvg import *
	from PySide.QtTest import *
	from PySide.QtUiTools import *
	from PySide.QtWebKit import *
	from PySide.QtXml import *
	from PySide.QtXmlPatterns import *
	from PySide.phonon import *
	import shiboken

except ImportError:
	try:
		# Check import PySide2
		from PySide2.QtCore import *
		from PySide2.QtGui import *
		from PySide2.QtHelp import *
		from PySide2.QtMultimedia import *
		from PySide2.QtNetwork import *
		from PySide2.QtPrintSupport import *
		from PySide2.QtQml import *
		from PySide2.QtQuick import *
		from PySide2.QtQuickWidgets import *
		from PySide2.QtScript import *
		from PySide2.QtSql import *
		from PySide2.QtSvg import *
		from PySide2.QtTest import *
		from PySide2.QtUiTools import *
		from PySide2.QtWebChannel import *
		from PySide2.QtWebKit import *
		from PySide2.QtWebKitWidgets import *
		from PySide2.QtWebSockets import *
		from PySide2.QtWidgets import *
		from PySide2.QtXml import *
		from PySide2.QtXmlPatterns import *
		import shiboken2 as shiboken
		
	except ImportError:
		# Failed import to PySide and PySide2.
		raise ImportError('No module named PySide and PySide2.')

まず、「try文」を使用して、「PySide」のモジュールが読み込めるかテストします。このimportに失敗したら、次は「PySide2」を確認っという流れです。「shiboken2」はとりあえず「shiboken」として使えるように「as」を使いました。

Maya2017での確認

シンプルにQMainWindowを使ってウインドウを作ってみました。

import PySideWrap
window = PySideWrap.QMainWindow()
window.show()

importですべてのモジュールを読み込んでいるせいか、ちょっとカクついたけど無事ウインドウが作れました。

2017

Maya2014での確認

こちらも同じコードで無事にウインドウが作れました。

2014

ちょっと怖い部分もありますが、ひとまずこれでやってみます!∠( ゚д゚)/