PyQt5用GraphicsView显示图片

PyQt5显示图片一般是QLabel或者QGraphicsView两种。本文只介绍一下我使用QGraphicsView显示图片的经验。

GraphicsView框架介绍:GraphicsView

1、图片太大,QGraphicsView初始显示不全。如果先对图片resize,图片会严重失真,后面放大之后特别模糊。采用的方法是图片实例化为图元,对图元进行缩放,然后再添加到场景和视图中。

# 实例化QPixmap,加载图片
img1 = QPixmap()
img1 .load(r'D:\1.jpg')
# 或者opencv读取图片,直接加载图片内容
#img1 = QtGui.QImage(img1.data, img1.shape[1], img1.shape[0],QtGui.QImage.Format_RGBA8888)       
#img1 = QPixmap(img1)
# scrollLableItem是自定义的图元类,继承自QGraphicsPixmapItem,是为了实现图片缩放和移动。
item1 = scrollLableItem(img1)
item1.setScale(self.scale)
#self.image1是GraphicsView的名字
self.image1.scene.addItem(item1)

2、代码要在不同的显示器上运行,self.scale的设置不能为常数。
首先在自己电脑上试验出一个scale_a,使图片能够完全显示或者达到想要的效果,然后令图片尺寸 * scale_a=显示器尺寸 * scale_b,求出scale_b。至于为什么,自己琢磨吧。最后的self.scale=显示器尺寸 * scale_b/图片尺寸。
比如我的图片是1280 * 640,显示器尺寸是1920 * 1080,试验出的scale_a是0.67,那么得出的scale_b就是0.44,最终的self.scale就是self.width * 0.44 / 1280。

# 获取显示器分辨率大小
self.screenRect = self.desktop.screenGeometry()
self.height = self.screenRect.height()
self.width = self.screenRect.width()
self.scale = float(self.width * 0.44 / 1280)

图片的完全显示效果就可以在运行不同显示器上了。

3、待解决。scrollLableItem继承自QGraphicsPixmapItem,重构了鼠标事件,能够实现图片的放缩,移动。但是图片放大之后出现了滚动条,缩小之后滚动条不消失,就有可能移动出画面,目前认为是scene大小的关系,难道要缩放之后就刷新scene吗?有大佬知道的话,还望不吝赐教!!

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 要在PyQt5GraphicsView显示图片,可以按照以下步骤进行: 1. 导入必要的模块: ```python from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QGraphicsScene, QGraphicsView ``` 2. 创建一个QGraphicsScene对象,并将图片添加到场景: ```python scene = QGraphicsScene() pixmap = QPixmap("image.jpg") scene.addPixmap(pixmap) ``` 3. 创建一个QGraphicsView对象,并将场景设置为其场景: ```python view = QGraphicsView(scene) ``` 4. 显示QGraphicsView对象: ```python view.show() ``` 完整的代码示例: ```python from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QGraphicsScene, QGraphicsView scene = QGraphicsScene() pixmap = QPixmap("image.jpg") scene.addPixmap(pixmap) view = QGraphicsView(scene) view.show() ``` 其,"image.jpg"是要显示图片文件路径。 ### 回答2: PyQt5Python下最为流行的GUI(图形用户界面)框架之一,而QtGraphics View框架是一个强大的2D图形系统,是Qt4.2之后添加的新特性,用于管理和交互大规模的自定义2D图形项和选项。 为了在PyQt5使用Graphics View,需要安装PyQt5和QtDesigner。Graphics View的4个主要类分别是QGraphicsView、QGraphicsScene、QGraphicsItem以及QGraphicsPixmapItem。其,QGraphicsViewGraphics View框架的核心,提供了一个可视化的框架以及与用户交互的接口。而QGraphicsScene是Graphics View框架2D场景的容器,通过addPixmap()方法添加QGraphicsPixmapItem类表示的图片项。QGraphicsPixmapItem是QGraphicsItem的一个子类,它主要用于显示图片。 下面举例说明如何在PyQt5使用GraphicsView显示图片: ```python import sys from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsPixmapItem from PyQt5.QtGui import QPixmap if __name__ == '__main__': app = QApplication(sys.argv) scene = QGraphicsScene() view = QGraphicsView(scene) view.show() pixmap = QPixmap('C:/Users/image.png') # 加载图片 item = QGraphicsPixmapItem(pixmap) # 创建图片项 scene.addItem(item) # 将图片项添加到场景 sys.exit(app.exec_()) ``` 首先,创建QGraphicsScene对象作为容器,其宽度和高度会自动调整以包含添加的所有项目。然后,创建一个QGraphicsView对象,并将QGraphicsScene对象作为构造函数的参数传递进去。最后,使用QPixmap类加载图片文件,并创建一个QGraphicsPixmapItem对象来表示图片项。使用QGraphicsScene对象的addItem()方法将图片项添加到场景,最后调用app.exec_()启动应用程序。 当运行这段代码时,会在应用程序看到一个空白的窗口,但在窗口区域显示出指定的图片。我们可以使用QGraphicsView提供的缩放、移动、旋转等操作来调整图片的位置和大小,与用户进行交互。总的来说,PyQt5提供的Graphics View框架是一个强大的2D图形绘制工具,能够满足大部分图形绘制需求。 ### 回答3: PyQt5是一个适用于Python的GUI图形界面库,它提供了许多方法和工具来简化GUI的创建和管理。PyQt5的“Graphics View”模块是一个强大的组件,它提供了一个可扩展的基于图形的框架,可以在其显示和操作大量的2D图形对象。Graphics View提供了一个类似于画布的视图,可以在其添加图形项,包括线条、矩形、椭圆、文本、像素图和SVG图形等。 要在PyQt5 Graphics View显示图片,我们需要先将图像加载到内存。这可以通过PyQt5的QImage类和QPixmap类来实现。QImage类支持从多种格式的图像文件加载图像,而QPixmap类则可以从QImage对象创建QPixmap对象。一旦我们将图像加载到QPixmap对象,我们就可以将其添加到Graphics View窗口作为一个图形项。 步骤如下: 1.导入需要的模块: ```python from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QApplication from PyQt5.QtGui import QImage, QPixmap ``` 2.创建一个QGraphicsView对象和一个QGraphicsScene对象: ```python view = QGraphicsView() scene = QGraphicsScene() view.setScene(scene) ``` 3.从图像文件使用QImage对象加载图像: ```python image = QImage("image.png") ``` 4.使用QPixmap类从QImage对象创建一个QPixmap对象: ```python pixmap = QPixmap.fromImage(image) ``` 5.创建一个QGraphicsPixmapItem对象,并将其添加到QGraphicsScene: ```python item = QGraphicsPixmapItem(pixmap) scene.addItem(item) ``` 6.最后,显示Graphics View视图: ```python view.show() ``` 完成上述步骤后,我们可以在PyQt5Graphics View显示图像。需要注意的是,如果我们想在更高的分辨率下显示图像,我们可以设置Graphics View的缩放因子。例如,我们可以将缩放因子设置为2.0,这将使所有图形项的大小增加一倍。 总结起来,PyQt5 Graphics View是一个非常强大的组件,可以方便地管理和显示大量的2D图形对象,包括图像。通过上述步骤可以轻松将图像加载到内存显示Graphics View视图
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值