使用PyQt5实现类似qq截图的放大镜功能

本文介绍如何利用PyQt5库创建一个类似QQ截图的放大镜功能。通过在QLabel视图上实时捕获鼠标位置,实现放大镜的交互效果。
摘要由CSDN通过智能技术生成

文章目录


前言

研发过程中需要实现类似QQ截图的放大镜功能,相信很多人都知道这种效果![qq截图](https://img-blog.csdnimg.cn/65df910cf45e4dea945cd280048d2f7b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAa29uZ2Zzc3p6,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

这种功能应该如何实现,我在https://github.com/fandesfyf/Jamscreenshot的截图工具箱中找到了方法


示例

具体操作就是在窗口中显示图像,之后根据鼠标所在的位置,将图像的对应位置放大,并使用画笔显示在鼠标附近。简单示例如下:
import sys
import traceback
from PyQt5.QtCore import QRect, Qt
from PyQt5.QtGui import QPainter, QPen, QPixmap, QColor, QFont, QBrush
from PyQt5.QtWidgets import QLabel, QApplication


class Drawing(QLabel):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.pos_x = 0
        self.pos_y = 0
        self.enter = False
        self.setMouseTracking(True)

    def mouseMoveEvent(self, e): #获取鼠标位置
        try:
            s = e.localPos()
            self.pos_x = s.x()
            self.pos_y = s.y()
            self.update()
        except Exception as e:
       
实现对指定路径图片的放大镜功能,可以使用 PYQT5 中的 QGraphicsView 和 QGraphicsScene 类来实现。以下是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene from PyQt5.QtGui import QPixmap, QTransform class ImageZoom(QGraphicsView): def __init__(self, path): super().__init__() self.scene = QGraphicsScene(self) self.setScene(self.scene) self.setRenderHint(QPainter.Antialiasing) self.setRenderHint(QPainter.SmoothPixmapTransform) self.image = QPixmap(path) self.pixmap_item = self.scene.addPixmap(self.image) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorUnderMouse) self.setInteractive(True) self.zoom_factor = 1.25 self.min_zoom = 0.1 self.max_zoom = 10.0 def wheelEvent(self, event): zoom_in = event.angleDelta().y() > 0 if zoom_in: zoom = self.zoom_factor else: zoom = 1 / self.zoom_factor self.scale(zoom, zoom) if self.transform().m11() < self.min_zoom: self.setTransform(QTransform.fromScale(self.min_zoom, self.min_zoom)) elif self.transform().m11() > self.max_zoom: self.setTransform(QTransform.fromScale(self.max_zoom, self.max_zoom)) if __name__ == "__main__": app = QApplication(sys.argv) zoom = ImageZoom("path/to/image.jpg") zoom.show() sys.exit(app.exec_()) ``` 这个程序创建了一个名为 ImageZoom 的类,它继承自 QGraphicsView,用于显示一个指定路径的图片。程序使用 QGraphicsScene 类来管理图片的显示,使用 QPixmap 类来加载指定路径的图片,并将其添加到 QGraphicsScene 中。程序使用 wheelEvent 方法来实现缩放功能。当鼠标滚轮滚动时,程序会根据滚动方向计算缩放比例,并使用 scale 方法来缩放 QGraphicsView。程序使用 setTransform 方法来限制缩放比例的最小值和最大值。最后,程序创建一个 QApplication 实例,显示 ImageZoom 窗口,并运行应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kongfsszz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值