Создать прожектор мыши - PullRequest
       20

Создать прожектор мыши

0 голосов
/ 23 сентября 2018

Я пытаюсь создать простое приложение, чтобы поместить прожектор вокруг положения курсора мыши (затемнить все остальное) и переместить прожектор с помощью мыши.

Примерно так:

enter image description here

У меня нет большого опыта работы с Qt.Я начал с этого примера , но далеко не ушел.

Я создал окно, которое остается сверху, и установил его непрозрачность.Но я не уверен, как сделать его полностью прозрачным.

1 Ответ

0 голосов
/ 23 сентября 2018

Чтобы установить цвет прозрачного фона, необходимо установить атрибут 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...