ウィジェットの最大化/最小化のボタンを非表示にする – Maya PySide / PySide2

python,qt,PySide,maya,PySide2

ウィジェットの最大最小ボタンを非表示がわからない!というリクエストをいただいたので書いてみました
ウィジェットの最大最小ボタンを非表示にする方法はいろいろ方法があります
一番簡単な方法はQt.ToolやQt.Drawerを使用する方法です

# -*- coding: utf-8 -*- 
import sys
from Qt.QtWidgets import *
from Qt.QtGui import *
from Qt.QtCore import *

from maya.app.general.mayaMixin import MayaQWidgetBaseMixin

class GUI(MayaQWidgetBaseMixin, QMainWindow):
        def __init__(self, parent=None):
                super(GUI, self).__init__(parent)
                self.setWindowFlags(Qt.Tool)
                self.setGeometry(200, 300, 400, 300)

if __name__ == "__main__":
    app = QApplication.instance()
    main = GUI()
    main.show()
    sys.exit()
    app.exec_()

しかしQt.Toolなどを使いたくないなどそういう場合もあるかと思います
そういう場合はCustomizeWindowHint flagを使用するといいです。Referenceを見に行くとたくさんのフラグがあります

そのなかにQt.WindowCloseButtonHintというフラグがあります。
閉じるというボタンフラグを追加するようです。

# -*- coding: utf-8 -*- 
import sys
from Qt.QtWidgets import *
from Qt.QtGui import *
from Qt.QtCore import *

from maya.app.general.mayaMixin import MayaQWidgetBaseMixin

class GUI(MayaQWidgetBaseMixin, QMainWindow):
        def __init__(self, parent=None):
                super(GUI, self).__init__(parent)
                self.setWindowFlags(Qt.WindowCloseButtonHint)
                self.setGeometry(200, 300, 400, 300)

if __name__ == "__main__":
    app = QApplication.instance()
    main = GUI()
    main.show()
    sys.exit()
    app.exec_()

試しにsetWindowFlagsに入れて実行してみます。

エラーは起きていませんがしかし、ウィンドウが起動しません。

先ほどのドキュメントをよく読むと
The CustomizeWindowHint flag is used to enable customization of the window controls. This flag must be set to allow the WindowTitleHint , WindowSystemMenuHint , WindowMinimizeButtonHint , WindowMaximizeButtonHint and WindowCloseButtonHint flags to be changed.
フラグの変更できるように設定する必要があると書かれています。

こういう時はすべてのユーザーインターフェイスオブジェクトの基本クラスであるQWidgetを使用するといいです。

先ほどのsetWindowFlagsを以下に書き換え実行してみます

self.setWindowFlags(Qt.Window|Qt.WindowCloseButtonHint)


うまくいきました
これ以外にもウィジェットの最大化/最小化のボタンを非表示にする方法はありますので興味ある方は調べてみたはいかがでしょうか?


ちなみにQt.WindowCloseButtonHintを消すと上の画像のようなウインドウを表示させることができ

Qt.WindowStaysOnTopHintを記述すると常にトップに表示されたり、Qt.WindowMinimizeButtonHintを記述すると最小ボタンのみを機能させたりとFlagを追加することで色々なカスタマイズができます