gpt4 book ai didi

python - 创建鼠标聚光灯

转载 作者:行者123 更新时间:2023-12-01 09:00:50 27 4
gpt4 key购买 nike

我正在尝试创建一个简单的应用程序,将聚光灯放在鼠标光标位置周围(使其他所有内容变暗)并用鼠标移动聚光灯。

类似这样的事情:

enter image description here

我对 Qt 没有太多经验。我从 this example 开始,但走不了多远。

我创建了一个位于顶部的窗口并设置了其不透明度。但我不知道如何使其部分完全透明。

最佳答案

要设置透明背景色,您必须设置属性Qt::WA_TranslucentBackground,然后绘制一个减去圆的矩形,如下所示:

from PyQt5 import QtCore, QtGui, QtWidgets

class SpotlightWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(SpotlightWidget, self).__init__(parent, QtCore.Qt.WindowStaysOnTopHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
self.showFullScreen()
self.setMouseTracking(True)
self.center = QtCore.QPoint()

self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.quitAction = QtWidgets.QAction("Salir", self,shortcut="Ctrl+Q", triggered=self.close)
self.addAction(self.quitAction)

def mouseMoveEvent(self, event):
self.center = event.pos()
self.update()
super(SpotlightWidget, self).mouseMoveEvent(event)

def paintEvent(self, event):
painter = QtGui.QPainter(self)
painter.setPen(QtCore.Qt.NoPen)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setBrush(QtGui.QColor(108, 119, 125, 220))
radius = 100
path = QtGui.QPainterPath()
if not self.center.isNull():
path.moveTo(self.center + radius/2*QtCore.QPoint(1, 0))
path.arcTo(QtCore.QRectF(self.center - radius/2*QtCore.QPointF(1, 1), radius*QtCore.QSizeF(1, 1)), 0, 360)
path.addRect(QtCore.QRectF(self.rect()))
painter.drawPath(path)


if __name__ == '__main__':
import sys

app = QtWidgets.QApplication(sys.argv)
w = SpotlightWidget()
w.show()
sys.exit(app.exec_())

enter image description here

关于python - 创建鼠标聚光灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com