忍者ブログ

ちょびちょびMayaPython

Autodesk Maya中心にPythonをしていきます。 自分の復習を兼ねて自作のscriptなどを中心に公開していく予定です

【PySide2】PySideからPySide2に移行してみました

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

【PySide2】PySideからPySide2に移行してみました



Maya2017からPySideが廃止されPySide2になるということで試しに移行してみました

実験したMayaのバージョンはMaya2016とMaya2017です


ボタンを押したら文字がプリントされるコードを組みます
ベースのコードはこちら
import sys
import shiboken
from PySide.QtGui import*
from PySide.QtCore import*
from maya import OpenMayaUI

#Mayaのウィンドウの後ろに行かないよう設定、それに合わせCentralWidgetを設定する
ptr = OpenMayaUI.MQtUtil.mainWindow()
parent = shiboken.wrapInstance(long(ptr), QWidget)
cw = QWidget()
class Main(QMainWindow):
    def __init__(self):
        super(Main, self).__init__(parent)
        self.initUI()
    def initUI(self):
        self.setCentralWidget(cw)
        self.setGeometry(500, 400, 250, 200)
        self.setWindowTitle("Test")
        #ボタンをQPushButtonで作成
        btn = QPushButton(u"プリント",cw)
        btn.clicked.connect(self.x)
        btn.move(50,50)
    def x(self):
        print "x"
def main():
    app = QApplication.instance()
    main = Main()
    main.show()
    sys.exit()
    app.exec_()
if __name__ == "__main__":
    main()

これを実行した結果がこちらです





さて、Maya2016では実行可能なのがわかりました。
では同じコードをMaya2017で実行してみます





# Error: line 1: ImportError: file <maya console> line 2: No module named shiboken # 
エラーが出ました
実はmaya2017からはshibokenはsiboken2に変更されており、実行するにはshiboken2に変更しなければなりません。

import shibokenをimport shiboken2に
それに伴い

parent = shiboken.wrapInstance(long(ptr), QWidget)

の部分を

parent = shiboken2.wrapInstance(long(ptr), QWidget)

に変更します
そしてPySideはPySide2に変更されていますので
from PySide.QtGui import*
from PySide.QtCore import*


from PySide2.QtGui import*
from PySide2.QtCore import*
に変更してみます

 実行してみると


# Error: line 1: NameError: file <maya console> line 8: name 'QWidget' is not defined #
エラーが出ました

PySide2では
QtGuiのほとんどの機能はQtWidgetsに移動しているため

from PySide2.QtGui import*を
from PySide2.QtWidgets import*に変更し実行してみます



実行できました


PySide2でのコード

import sys
import shiboken2
from PySide2.QtWidgets import*
from PySide2.QtCore import*
from maya import OpenMayaUI
ptr = OpenMayaUI.MQtUtil.mainWindow()
parent = shiboken2.wrapInstance(long(ptr), QWidget)
cw = QWidget()
class Main(QMainWindow):
    def __init__(self):
        super(Main, self).__init__(parent)
        self.initUI()
    def initUI(self):
        self.setCentralWidget(cw)
        self.setGeometry(500, 400, 250, 200)
        self.setWindowTitle("Test")
        btn = QPushButton(u"プリント",cw)
        btn.clicked.connect(self.x)
        btn.move(50,50)
    def x(self):
        print "x"
def main():
    app = QApplication.instance()
    main = Main()
    main.show()
    sys.exit()
if __name__ == "__main__":
    main()


今のところそこまで複雑なことをしていませんのでそこまで記述を変えずに変更できていますが
今後作っていく過程で色々あるかもしれません・・・
とりあえずPySide2の日本語情報がたくさん出てくることを祈っています!


拍手[6回]

PR

コメント

プロフィール

HN:
ちょび雲
年齢:
31
性別:
男性
誕生日:
1993/12/15
職業:
デザイナー
趣味:
スポーツ、ランニングなど
自己紹介:
ゲームの背景を中心にモデラーをやってます。
こういうツールがあったらいいなーと思ったところからPythonの勉強を始めました

カテゴリー

P R