【python】setWindowFlags

发布于 6 天前  7 次阅读


在 PySide6 中,setWindowFlags() 是用于设置窗口标志的方法,控制窗口的行为和外观。参数为 Qt.WindowFlags 枚举的组合,允许设置窗口是否是模态的、是否有标题栏、是否置顶等特性。


语法

python
widget.setWindowFlags(Qt.WindowFlags)
  • Qt.WindowFlagsQt.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)

常用组合场景

    1. 标准对话框窗口
    2. widget.setWindowFlags(Qt.Dialog | Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
    3. 无边框的全屏窗口
      widget.setWindowFlags(Qt.FramelessWindowHint | Qt.Window)
      widget.showFullScreen()
    4. 悬浮工具窗口
      widget.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
    5. 弹出窗口
      widget.setWindowFlags(Qt.Popup)
    6. 始终在底部的窗口
    widget.setWindowFlags(Qt.Window | Qt.WindowStaysOnBottomHint)

其他方法

  • 获取当前窗口标志:
    flags = widget.windowFlags()
    print(flags)
  • 追加窗口标志:
widget.setWindowFlags(widget.windowFlags() | Qt.WindowStaysOnTopHint)

注意事项

  • 调用 setWindowFlags() 后,通常需要调用 show()hide()show() 以应用更改。
  • 一些标志可能因平台(Windows、Linux、MacOS)的不同而表现不一致,例如 Qt.Sheet 在 MacOS 上有特殊行为,但在其他平台没有。

通过灵活组合 setWindowFlags 参数,可以实现自定义的窗口行为和外观!

最后更新于 2024-11-16