在 PySide6 中,setWindowFlags()
是用于设置窗口标志的方法,控制窗口的行为和外观。参数为 Qt.WindowFlags
枚举的组合,允许设置窗口是否是模态的、是否有标题栏、是否置顶等特性。
语法
Qt.WindowFlags
是Qt.WindowType
的枚举值或位掩码的组合,定义窗口的类型和行为。
主要的 Qt.WindowType
枚举值
枚举值 | 描述 |
---|---|
基本窗口类型 | |
Qt.Widget |
默认类型,窗口是一个普通的子窗口部件,不能独立存在。 |
Qt.Window |
顶级窗口,具有标题栏、边框等标准窗口外观。 |
Qt.Dialog |
对话框窗口,通常用于模态对话框。 |
Qt.Sheet |
MacOS 上的工作表窗口类型,通常附加在父窗口上。 |
Qt.Drawer |
抽屉窗口类型(类似侧边栏)。 |
Qt.Popup |
弹出窗口,例如上下文菜单,失去焦点时自动关闭。 |
Qt.Tool |
工具窗口,通常是无边框的小窗口。 |
Qt.ToolTip |
工具提示窗口,无标题栏和边框,通常自动关闭。 |
Qt.SplashScreen |
启动画面窗口,通常在应用启动时显示,自动关闭。 |
Qt.Desktop |
表示整个桌面,通常不需要手动设置此标志。 |
Qt.SubWindow |
子窗口类型,用于 MDI 应用程序中的嵌套窗口。 |
附加窗口标志 | |
Qt.FramelessWindowHint |
无边框窗口,去除标题栏和边框,适合自定义窗口外观。 |
Qt.WindowTitleHint |
启用窗口标题栏。 |
Qt.WindowSystemMenuHint |
启用窗口的系统菜单(右键菜单)。 |
Qt.WindowMinimizeButtonHint |
启用最小化按钮。 |
Qt.WindowMaximizeButtonHint |
启用最大化按钮。 |
Qt.WindowCloseButtonHint |
启用关闭按钮。 |
Qt.WindowStaysOnTopHint |
使窗口始终置于所有其他窗口之上。 |
Qt.WindowStaysOnBottomHint |
使窗口始终位于所有其他窗口之下。 |
Qt.CustomizeWindowHint |
禁用窗口的所有默认标志,允许完全自定义窗口行为和外观。 |
组合使用
Qt.WindowFlags
支持通过按位或运算符 (|
) 组合多个标志。例如:
示例 1:无边框窗口
from PySide6.QtWidgets import QApplication, QLabel
from PySide6.QtCore import Qt
app = QApplication([])
label = QLabel("This is a frameless window")
label.setWindowFlags(Qt.FramelessWindowHint | Qt.Window)
label.show()
app.exec
示例 2:带最小化、最大化和关闭按钮的窗口
label.setWindowFlags(Qt.Window | Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint)
示例 3:始终置顶的工具窗口
label.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
常用组合场景
-
- 标准对话框窗口
widget.setWindowFlags(Qt.Dialog | Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
- 无边框的全屏窗口
- 悬浮工具窗口
- 弹出窗口
- 始终在底部的窗口
- widget.setWindowFlags(Qt.Window | Qt.WindowStaysOnBottomHint)
其他方法
- 获取当前窗口标志:
- 追加窗口标志:
注意事项
- 调用
setWindowFlags()
后,通常需要调用show()
或hide()
再show()
以应用更改。 - 一些标志可能因平台(Windows、Linux、MacOS)的不同而表现不一致,例如
Qt.Sheet
在 MacOS 上有特殊行为,但在其他平台没有。
通过灵活组合 setWindowFlags
参数,可以实现自定义的窗口行为和外观!