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の日本語情報がたくさん出てくることを祈っています!