如何在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
相关产品推荐
相关产品推荐

