2024-04-20 03:51:59 发布
网友
我正在尝试创建一个简单的应用程序,将聚光灯放在鼠标光标位置周围(使其他所有东西变暗)并用鼠标移动聚光灯。你知道吗
像这样:
我对Qt没有太多的经验。我从this example开始,但走不了多远。你知道吗
我创建了一个保持在顶部的窗口并设置其不透明度。但我不知道如何使它的一部分完全透明。你知道吗
要设置透明背景色,必须设置属性Qt::WA_TranslucentBackground,然后绘制一个矩形减去一个圆,如下所示:
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_())
要设置透明背景色,必须设置属性
Qt::WA_TranslucentBackground
,然后绘制一个矩形减去一个圆,如下所示:相关问题 更多 >
编程相关推荐