【问题标题】:Create a mouse spotlight创建鼠标聚光灯
【发布时间】:2018-09-24 10:28:34
【问题描述】:

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

类似这样的:

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

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

【问题讨论】:

    标签: python pyqt pyqt5


    【解决方案1】:

    要设置透明背景色,你必须设置属性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_())
    

    【讨论】:

    • 不管是谁:Windows Powertoys 现在在“鼠标实用程序”下包含一个内置选项
    猜你喜欢
    • 2021-11-24
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多