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

MacOS下Python置顶窗口脚本全屏模式异常问题求助

问题解决:MacOS下PyQt6置顶窗口兼容全屏应用

问题分析

MacOS的全屏应用运行在独立的Space(桌面空间)中,普通Qt窗口默认会触发Space切换,导致全屏应用退出;同时WindowStaysOnTopHint仅能在当前Space内置顶,无法跨全屏应用所在的Space显示。

解决方案

通过组合Qt窗口标志和Mac特有的属性,让窗口成为不触发Space切换的工具窗口,同时保持跨全屏应用的置顶层级:

  • 使用Tool窗口标志,标记窗口为工具类窗口,Mac下这类窗口不会触发Space切换
  • 启用WA_MacAlwaysShowToolWindow属性,强制工具窗口在全屏应用上方显示
  • 启用WA_ShowWithoutActivating属性,显示窗口时不抢占焦点,避免全屏应用退出
  • 可选添加FramelessWindowHint,去掉窗口边框,更适合悬浮GIF场景

修改后的代码

import sys
import os
import time
from PyQt6 import QtWidgets, QtGui, QtCore

class LoadingGif(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        
        self.setGeometry(0, 0, 200, 200)
        base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
        imagePath = os.path.join(base_path, "earth.gif")

        self.movie = QtGui.QMovie(imagePath)
        self.movie.setScaledSize(QtCore.QSize(200, 200))

        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(QtCore.QRect(0, 0, 200, 200))
        self.label.setMovie(self.movie)
        self.label.mousePressEvent = self.CloseWindow
        self.movie.start()
        
        # 组合窗口标志
        self.setWindowFlags(
            QtCore.Qt.WindowType.WindowStaysOnTopHint 
            | QtCore.Qt.WindowType.Tool 
            | QtCore.Qt.WindowType.FramelessWindowHint  # 可选,去掉边框
        )
        # Mac特有属性设置
        self.setAttribute(QtCore.Qt.WidgetAttribute.WA_MacAlwaysShowToolWindow, True)
        # 显示时不激活窗口,避免抢焦点
        self.setAttribute(QtCore.Qt.WidgetAttribute.WA_ShowWithoutActivating, True)

    def CloseWindow(self, event):
        sys.exit()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    time.sleep(5)

    window = LoadingGif()
    window.show()
    sys.exit(app.exec())

补充说明

  • 如果需要保留窗口边框,移除FramelessWindowHint标志即可
  • WA_MacAlwaysShowToolWindow是MacOS专属属性,仅在该系统下生效,不影响Windows平台的原有功能
  • 测试时确保MacOS系统设置中没有限制应用的窗口控制权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:07:28