2014年12月24日水曜日

PySideを使ってMayaでwebを表示してみる

今回は現在勉強中のPySideネタ書いてみます。
自分なりの言い回しで書いてるので本来の意味と違うかもしれませんがご容赦ください。

PySideはたしか2014からデフォルトで入ってるpythonのライブラリです。
詳しくはググってください(おきまり)


PySideを使ってMayaでwebを表示したい!とふと思ったので挑戦してみました。
qtDesignerという便利ツールもありますが今回は勉強のために一からPySideと向き合ってみます。

と言いつつも特に解説もせず、早速結論です。笑

####################################################################

# まずは必要なライブラリをインポートします。
from PySide import QtCore, QtGui, QtWebKit
from maya import OpenMayaUI, cmds
import shiboken

# QWidgetを継承してブラウザーを作成するクラス
class browserUI(QtGui.QWidget):
# 初期化関数
def __init__(self, parent=None):
# スーパークラス(QWidget)のインスタンスメソッドからparentを使いたいのでsuper関数を使う
super(browserUI, self).__init__(parent)
# showUIメソッドの呼び出し
self.showUI()

def showUI(self):
# レイアウトの作成
vbox = QtGui.QVBoxLayout(self)

# ブラウザの作成
self.browser = QtWebKit.QWebView(self)
# URLの設定
self.browser.load(QtCore.QUrl('http://null0218.blogspot.jp/'))
# レイアウトにアタッチ
vbox.addWidget(self.browser)

#親レイアウトに合わせて伸縮する設定
self.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)

# 実行関数
def viewBrowser():
# mayaの裏側に行かないように設定
# mayaのメインウィンドウを取得
mayaMain = OpenMayaUI.MQtUtil.mainWindow()
# 取得したメインウィンドウをPySideのUIとして取得
parent = shiboken.wrapInstance(long(mayaMain), QtGui.QWidget)
# mayaのメインウィンドウの子供としてUIを作成
mainUI = QtGui.QMainWindow(parent)

# 上で書いたのQWidgetの呼び出し
browser = browserUI()
# QWidgetをMenuとしてQMainWindowにアタッチ
mainUI.setMenuWidget(browser)
# QMainWindowの表示
mainUI.show()

# おまじない
if __name__ == '__main__':
viewBrowser()

####################################################################
タブがスペースになってしまった;;
試す方はインデント調整してください;;

今回はざっくりした解説も書いてるので参考にしてもらえればと思います。

↓とまぁこんな感じで意外とすんなりできちゃいました。
こだわったポイントはmayaの裏側に行かないように設定ってとこですかねー



















ただ、どうやら今のPySideの実行環境だとプラグインとかをロードしても
HTML5がダメみたいでyoutubeとかが見れない、うぬぬ。

↓こんな感じでmayaのレイアウトをちょっと改造してyoutube見たかったー






















見れる方法ご存知の方、是非ご教授ください。



それにしても、PySideはいろいろな場所で使えていいですねー
ちょっと環境を整えればmayaだけじゃなくて
独立したアプリケーションとして面白いことができます。

















ノードエディタっぽいのも作れちゃいます。

まだまだ勉強すること多いですがやってみると楽しいので皆さんもぜひー
ではでは。