setWindowFlagsを使いこなす!!

takkun
どうも!たっくんです!
スーパーマリオ オデッセイ1番くじの、大きな帽子クッションが欲しい!(*人′3`)

Qt(PySide/PyQt)のWindowって色々な見た目のパターンを作れるけど、ちょっとわかりにくいのが「setWindowFlags」ですよね(´・ω・`)

メモも兼ねて、簡単にまとめてみたいと思います!(`・ω・´)ゞ

一部の設定は、Windowsやバージョンで多少見た目が変わる可能性があります。

setWindowFlagsって?

setWindowFlagsで適用できる値は、大きくわけて「type」と「hints」にわけられます!「type」にあるものは1つだけを設定することができて、「hints」は好きなものを好きなだけ設定することができます!

from PySide import QtCore, QtGui

window = QtGui.QWidget()
window.setWindowFlags(QtCore.Qt.Window)
window.show()
from PySide import QtCore, QtGui

# 「|」で区切りながら設定する
window = QtGui.QWidget()
window.setWindowFlags(
	QtCore.Qt.Window|QtCore.Qt.WindowCloseButtonHint
	)
window.show()
from PySide import QtCore, QtGui

# 指定が長すぎる場合は改行も可
window = QtGui.QWidget()
window.setWindowFlags(
	QtCore.Qt.Window|
	QtCore.Qt.WindowMinimizeButtonHint|
	QtCore.Qt.WindowCloseButtonHint
	)
window.show()

Typeのサンプル

QtCore.Qt.Window

ウィジェットに親があるか関わらず、ウィンドウのフレームとタイトルバーが作られます。ウィジェットに親がない場合は、このフラグを解除することはできません。

QtCore.Qt.Dialog

ウィジェットがダイアログのような見た目になります。タイトルバーのボタンに、最大化・最小化がありません。

QtCore.Qt.Sheet(OSX向け)

QtCore.Qt.Drawer(OSX向け)

QtCore.Qt.Popup

ポップアップメニューに適したウィンドウシステムになります。他のウインドウをクリックすると消えます。

QtCore.Qt.Tool

ウィジェットがツールウインドウになります。 ツールウインドウとは、通常のタイトルバーや装飾よりも小さいウィンドウです。 親がある場合、ツールウィンドウは常にその上に表示されます。

QtCore.Qt.SplashScreen

ウインドウがスプラッシュ画面になります。 「PySide.QtGui.QSplashScreen」のデフォルトのタイプです。

Hintsのサンプル

QtCore.Qt.MSWindowsFixedSizeDialogHint

ウィンドウに境界線を与えます。 このスタイルは、固定サイズのダイアログに伝統的に使用されています。最大化が使えなくなります。

QtCore.Qt.FramelessWindowHint

フレームのないウインドウになります。移動・閉じるなどを独自に実装する必要があります。

QtCore.Qt.CustomizeWindowHint

ウィンドウタイトルの「hints」を無効にします。好きな要素だけ追加したい時に便利です。

QtCore.Qt.WindowTitleHint(CustomizeWindowHintと併用)

ウインドウのタイトルを追加します。CustomizeWindowHintと併用しない場合、閉じるボタンが追加されます。

QtCore.Qt.WindowMinimizeButtonHint

ウインドウに、縮小ボタンを追加します。CustomizeWindowHintと併用すると、閉じるボタンが使えなくなります。

QtCore.Qt.WindowMaximizeButtonHint

ウインドウに、最大化ボタンを追加します。CustomizeWindowHintと併用すると、閉じるボタンが使えなくなります。

QtCore.Qt.WindowCloseButtonHint

ウインドウに、閉じるボタンを追加します。縮小・最大化のボタンは表示されません。

QtCore.Qt.WindowStaysOnTopHint

ウインドウが常に手前に表示されます。

QtCore.Qt.WindowStaysOnBottomHint

ウインドウが常に後ろに表示されます。