WindowをmayaWindowの後ろに行かせない方法いろいろ
PyQtやPySideを使用してウィジェットを制作した場合、
自分の制作したウィジェットがMayaの後ろに行ってしまったりすることが多々あります。
それを防ぐためにMayaのメインウィンドウに自分のウィジェットをペアレント化して防ぐのですが
従来のshibokenを使用した方法とMayaQWidgetBaseMixinを使った場合の
2017とそれ以前のバージョンで試してみました。
shibokenを使った方法
Maya2016.5以前
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import shiboken
from PySide.QtCore import *
from PySide.QtGui import *
from maya import OpenMayaUI
ptr = OpenMayaUI.MQtUtil.mainWindow()
parent = shiboken.wrapInstance(long(ptr), QWidget)
cw = QWidget()#CentralWidgetの設定用
class GUI(QMainWindow):
def __init__(self):
super(GUI, self).__init__()
self.initUI()
def initUI(self):
btn = QPushButton("OK",cw)
btn.setGeometry(50, 25, 100, 25)
self.setWindowTitle('GUI')
self.setGeometry(200, 300, 200, 100)
self.setCentralWidget(cw)
self.show()
def main():
app = QApplication.instance()
ex = GUI()
sys.exit()
app.exec_()
if __name__ == '__main__':
main()
Maya2017
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import shiboken2
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from maya import OpenMayaUI
ptr = OpenMayaUI.MQtUtil.mainWindow()
parent = shiboken2.wrapInstance(long(ptr), QWidget)
cw = QWidget()#CentralWidgetの設定用
class GUI(QMainWindow):
def __init__(self):
super(GUI, self).__init__(parent)
self.initUI()
def initUI(self):
btn = QPushButton("OK",cw)
btn.setGeometry(50, 25, 100, 25)
self.setWindowTitle('GUI')
self.setGeometry(200, 300, 200, 100)
self.setCentralWidget(cw)
self.show()
def main():
app = QApplication.instance()
ex = GUI()
sys.exit()
app.exec_()
if __name__ == '__main__':
main()
shibokenを使わない方法
2015年以降
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PySide.QtCore import *
from PySide.QtGui import *
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
class GUI(MayaQWidgetBaseMixin, QWidget):
def __init__(self, parent=None):
super(GUI, self).__init__(parent=parent)
self.initUI()
def initUI(self):
btn = QPushButton("OK",self)
btn.setGeometry(50, 25, 100, 25)
self.setWindowTitle('GUI')
self.setGeometry(200, 300, 200, 100)
self.show()
def main():
app = QApplication.instance()
ex = GUI()
sys.exit()
app.exec_()
if __name__ == '__main__':
main()
とりあえずこれでいけます!