コンテンツにスキップ

重複したウィンドウ作成の回避 質問1

たっきゅんさんのサイトで
ウィンドウを重複させない方法を読んだのですが、
かなり難し過ぎて
https://kiwamiden.com/how-to-avoid-overlapping-windows  
ほかの方のサイトを読み漁っているのですが、一向に回避が出来ずに苦しんでいます。

pySide → pySide2 の翻訳も加味しながら、読み漁っているのですが、できないのです。

ちなみに、初めてつまずいたのは、
たっきゅんさん書籍 ガチンコツール開発部 の、チャプター7の7.8.3(p114~)からです。
簡単にできると思ったら出来ずに、ここから読み進めておりませんが、
恐らく、この書籍内では、回避の記述がないのでは。。
と思ってしまい、他をあたっています。

例えば、この方のサイトも参考にさせていただきました。
http://flame-blaze.net/archives/4703  
僕と同じ考えだったので、うまくいくと思って翻訳しながらやってみたのですが、うまくいかず。。
以下

## -*- coding: utf-8 -*-
# *----------------------------------------------*#
# 各種モジュール読み込み
# *----------------------------------------------*#
from PySide2 import QtCore, QtGui, QtWidgets
from maya import OpenMayaUI as omUI
import shiboken2

# *----------------------------------------------*#
# MAIN
# *----------------------------------------------*#
def getMayaWindow():
    """
    Get the main Maya window as a QtGui.QMainWindow instance
    @return: QtGui.QMainWindow instance of the top level Maya windows
    """
    ptr = omUI.MQtUtil.mainWindow()
    if ptr is not None:
        return shiboken2.wrapInstance(long(ptr), QtWidgets.QMainWindow)

class testUI(QtWidgets.QDialog):
    def __init__(self):
        QtWidgets.QDialog.__init__(self, getMayaWindow())
        # すでにUIが出来てる場合は削除する
        [x.close() for x in self.parent().findChildren(self.__class__)]
        btn = QtWidgets.QPushButton("Hello World")
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(btn)
        self.setLayout(layout)

def main():
    mainWindow = getMayaWindow()
    nowExists = mainWindow.findChildren(testUI)
    for i in nowExists:
        i.close()
    win = testUI()
    win.show()

main()

どうしたらよいのでしょうか。。うーむ


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