如何使用Python实现悬浮于窗口/桌面上方、不干扰下层操作的overlay绘制程序
实现Python桌面Overlay绘制程序的方案
你可以用PyQt5实现该需求,核心思路是创建一个全屏、无边框、背景透明的顶层窗口,同时设置窗口属性让鼠标事件穿透到下层窗口,就不会干扰下层内容的正常操作。
依赖安装
- 首先安装依赖库:
pip install pyqt5
最小可运行示例代码
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPainter, QColor, QPen from PyQt5.QtCore import Qt, QRect class OverlayWindow(QWidget): def __init__(self): super().__init__() # 窗口基础配置 self.setWindowFlags( Qt.FramelessWindowHint # 无边框 | Qt.WindowStaysOnTopHint # 始终置顶 | Qt.Tool # 不显示任务栏图标 | Qt.WindowTransparentForInput # 鼠标事件穿透,不拦截下层操作 ) self.setAttribute(Qt.WA_TranslucentBackground) # 背景透明 # 全屏覆盖 screen_geo = QApplication.desktop().screenGeometry() self.setGeometry(screen_geo) def paintEvent(self, event): painter = QPainter(self) # 抗锯齿 painter.setRenderHint(QPainter.Antialiasing) # 配置画笔:红色、2px粗细 pen = QPen(QColor(255, 0, 0), 2) painter.setPen(pen) # 示例:绘制一个左上角100,100,宽300高200的红色矩形框 painter.drawRect(QRect(100, 100, 300, 200)) # 可在此处扩展绘制更多图形:方框、圆形、文字等 if __name__ == "__main__": app = QApplication(sys.argv) overlay = OverlayWindow() overlay.show() sys.exit(app.exec_())
功能说明
- 运行程序后会在屏幕(100,100)位置显示一个红色的矩形边框,所有鼠标点击、拖动操作都会直接作用在该矩形下方的窗口上,完全不影响正常使用
- 如果需要动态修改绘制内容,只需要修改
paintEvent里的绘制逻辑,调用update()方法即可刷新界面 - 如果不需要全局覆盖,仅需要覆盖指定窗口,可获取目标窗口的位置和大小,修改
setGeometry的参数即可适配
内容的提问来源于stack exchange,提问作者Ame
相关产品推荐
相关产品推荐

