コンテンツにスキップ

Mayaメインウィンドウの後ろへ行くのを回避(メインウィンドウparent)

メインウィンドウへparentし、Mayaウィンドウの後ろへ行くのを回避します。
参考:たっきゅんさん書籍 ガチンコツール開発部 の、チャプター7の7.8.2(p112~113)

qt.py

# -*- coding: utf-8 -*-

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

# OpenMayaUIに、Qtに関する補助機能が用意されています。これはPythonからでも利用できますが、「C++」の
# 「ポインタ※」という機能がPython には無いため、そのままでは使用できません。そこで、C++ で作られた機能
# をPythonから使えるようにしてくれる、PySide付属のモジュール「shiboken」を使用して対応していきます。
# 「shiboken」の中には、「wrapInstance」という機能があり、C++ のポインタの情報をPython で扱えるデータ
# に変換してくれます。コレを使ってポインタからQWidget に変換したデータを、呼び出された場所に「return」を
# 使用して返します。
# 「ポインタ」とは、データがメモリのどこに保存されているか、住所を表すものです。


def getMayaWindow():  # Maya のウィンドウを取得する関数です
    """
    Get the main Maya window as a QtGui.QMainWindow instance
    @return: QtGui.QMainWindow instance of the top level Maya windows
    """
    ptr = OpenMayaUI.MQtUtil.mainWindow()
    if ptr is not None:
        widget = shiboken2.wrapInstance(long(ptr), QtWidgets.QMainWindow)
        return widget

以上の、コードを、

  1. ファイル内に記述するか、
  2. モジュールとするか、

どちらかのやりかたに統一すると良いかもしれない。

もし、モジュールとしたいなら、
例えば、
lib フォルダ
├ __init__.py
└ qt.py
として、

from lib import qt

とファイル内に記述が必要である。


最終更新日: 2024年4月18日 09:56:45