MayaのSplashScreenをPySideで変える方法!!

takkun
どうも!たっくんです!
すっかりご無沙汰BLOGになってしまいました・・・(´;ω;`)

先日、Amaterasuに実装した、標準の起動画面を出してからオリジナルの画像に切替える方法です!

インストールディレクトリにコピーしてしまえば簡単に変えることができますが、アクセス権がなかったり無用な書き込みをしたくなかったのでこの方法を取りました(^_^;)

準備

まず、PySideでSplash Screenを変更するには、なんとかしてwidgetにアクセスするためのオブジェクトをゲットする必要があります(´・ω・`)

MayaはQtで作られるようになったので、「スタンドアローンなQtのアプリケーションの作り方とほぼ同等なのでは?」っと憶測しました。

そこで、QApplicationのインスタンスが格納されている変数「QtWidgets.qApp」から、Maya起動時のWidgetを調べてみることにしました(`・ω・´)ゞ

userSetup.py」に下記のコードを実行して結果を見てみます。

from PySide2 import QtCore, QtWidgets, QtGui
widgets = QtWidgets.qApp.topLevelWidgets()
for widget in widgets:
	print widget

すると、、、

<PySide2.QtWidgets.QWidget object at 0x0000028423AB05C8>
<PySide2.QtWidgets.QWidget object at 0x0000028423AB0608>
<PySide2.QtWidgets.QSplashScreen object at 0x0000028423AB0648>

QWidget」のインスタンス2つと、「QSplashScreen」のインスタンス1つが生成されていることがわかりました!(*´ω`*)

どうやらカスタマイズした「QSplashScreen」でないようなので、もう楽勝ですね!!「isinstance」を使って必要なデータを取り出しておきます。

from PySide2 import QtCore, QtWidgets, QtGui

splashScreen = None
widgets = QtWidgets.qApp.topLevelWidgets()
for widget in widgets:
	if isinstance(widget, QtWidgets.QSplashScreen):
		splashScreen = widget
		break

QSplashScreenのメソッドで画像変更

インスタンスをゲットできたので、「setPixmap」を使って画像を設定します!

from PySide2 import QtCore, QtWidgets, QtGui

splashScreen = None
widgets = QtWidgets.qApp.topLevelWidgets()
for widget in widgets:
	if isinstance(widget, QtWidgets.QSplashScreen):
		splashScreen = widget
		break
		
if splashScreen:
	pixmap = QtGui.QPixmap('画像パス')
	splashScreen.setPixmap(pixmap)

起動して確認してみます!

できたー!っと思ったのですが、よーく見るとMayaのバージョン情報が消滅してしまいました・・・

どうやら内部で画像にバージョン情報を合成して表示しているようですね(´;ω;`)

画像にバージョン情報の合成

Splash Screenに記載されている形式のバージョン情報は、Mayaコマンド「cmds.about(iv=True)」で取得することができるのでこれを合成していきます。

PySideで画像に字を書きたい場合は、「QPainter」を用意して「drawText」を使います。ここではなるべく見た目を合わせるために、「setFont」でフォントやサイズの設定をしました(`・ω・´)ゞ

from PySide2 import QtCore, QtWidgets, QtGui
from maya import cmds

splashScreen = None
widgets = QtWidgets.qApp.topLevelWidgets()
for widget in widgets:
	if isinstance(widget, QtWidgets.QSplashScreen):
		splashScreen = widget
		break
		
if splashScreen:
	pixmap = QtGui.QPixmap('画像パス')
	
	painter = QtGui.QPainter()
	painter.begin(pixmap)
	painter.setFont(QtGui.QFont('Arial', 8, QtGui.QFont.Bold))
	painter.drawText(QtCore.QPoint(5, 480), cmds.about(iv=True))
	painter.end()
	
	splashScreen.setPixmap(pixmap)

起動して、確認すると意図した状態にすることができました!

3 件のコメント

  • いつもお世話になっています。
    先日190422のAmaterasに更新を行ったのですが、
    こちらの”SplashScreenを変える”機能についてON/OFFを切り替えることは可能でしょうか?

    ————————–
    私の環境では
    C:\Users\ユーザー名\Documents\maya\バージョン\ja_JP\prefs\icons
    にオリジナルのMayaStartupImage.pngを置いて
    SplashScreenを変えておりました。
    ————————–

    お手すきの際にご確認いただけますと幸いです。
    よろしくお願いいたします。

  • >>BGデザイナーさん
    ご返信遅れまくりました。。。申し訳ございませんm(__)m
    Amaterasuで変更されるSplash ScreenのON/OFFの機能は実装しておりません。。。
    申し訳ございませんが、よろしくお願いいたします。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です