You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQt应用中禁用Mac OS系统下的全屏模式

解决方案

方案1:保留最大化按钮,仅拦截全屏行为(优先推荐)

通过重写窗口状态变更事件拦截全屏触发请求,将全屏逻辑替换为普通最大化,完全保留最大化按钮的可见性和基础缩放功能,跨平台通用:

from PyQt5.QtCore import Qt, QEvent
from PyQt5.QtWidgets import QMainWindow

class AppWindow(QMainWindow):
    def __init__(self, main_widget):
        super(AppWindow, self).__init__()
        self.setCentralWidget(main_widget)
    
    def changeEvent(self, event):
        # 监听窗口状态变更事件
        if event.type() == QEvent.WindowStateChange:
            # 检测到进入全屏状态时强制切换为普通最大化
            if self.isFullScreen():
                self.setWindowState(Qt.WindowMaximized)
                return
        # 其余事件走父类默认逻辑
        super().changeEvent(event)

如果需要同时禁用快捷键触发的全屏,可以额外重写键盘事件:

def keyPressEvent(self, event):
    # 拦截F11等常用全屏快捷键
    if event.key() == Qt.Key_F11 and (event.modifiers() == Qt.NoModifier):
        return
    super().keyPressEvent(event)

方案2:完全禁用全屏功能

如果不需要保留最大化按钮,可以直接通过窗口旗标隐藏最大化控件,从入口层面禁止全屏触发:

class AppWindow(QMainWindow):
    def __init__(self, main_widget):
        super(AppWindow, self).__init__()
        # 保留标题栏、最小化、关闭按钮,移除最大化按钮
        self.setWindowFlags(
            self.windowFlags() 
            & ~Qt.WindowMaximizeButtonHint
            | Qt.CustomizeWindowHint
        )
        self.setCentralWidget(main_widget)

原代码失效原因

Qt.WindowFullscreenButtonHint属于提示类窗口旗标,不具备强制约束效力,多数桌面窗口管理器(尤其是macOS、GNOME)会忽略该参数自行渲染窗口控件,因此修改后不会产生效果。

内容的提问来源于stack exchange,提问作者Snuh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:15:10