使用 PyQt5 实现图片查看器

摘要:
一般会使用在修改或者提高现有组件的功能,或者创建自己的组件,使用PyQt5的绘图API进行操作。要将图片显示出来,首先是继承QWidget,然后实现paintEvent()方法,主要是使用drawPixmap()方法,需要传入QPixmap对象并将其绘制出来,绘图的代码如下:1defpaintEvent:2"""3receivepaintevents4:parame:QPaintEvent5:return:6"""7ifself.scaled_img:8painter=QPainter()9painter.begin10painter.drawPixmap11painter.end()2.拖动图片在图片成功显示出来之后,需要能够去拖动图片,以便于查看图片的每个角落,主要得实现三个方法:mouseMoveEvent、mousePressEvent和mouseReleaseEvent,分别对应移动鼠标、点击鼠标和松开鼠标三个事件。

一、前言

在学习 PyQt5 的过程中我会不断地做一些小的 Demo,用于让自己能够更好地理解和学习,这次要做的就是一个图片查看器,主要功能包括打开图片、拖动图片、放大和缩小图片。

最终实现的图片查看器你效果如下:

使用 PyQt5 实现图片查看器第1张

二、主要步骤  

1.显示图片

PyQt5 绘图系统能渲染矢量图像、位图图像和轮廓字体文本。一般会使用在修改或者提高现有组件的功能,或者创建自己的组件,使用 PyQt5 的绘图 API 进行操作。在 Qt 中有 QPainter 类用于执行绘制的操作,绘图由 paintEvent() 来完成,绘图的代码要放在 QPainter 对象的 start() 和 end() 方法之间。

要将图片显示出来,首先是继承 QWidget,然后实现 paintEvent() 方法,主要是使用 drawPixmap() 方法,需要传入 QPixmap 对象并将其绘制出来,绘图的代码如下:

1 defpaintEvent(self, e):
2     """
3 receive paint events
4 :param e: QPaintEvent
5 :return:
6     """
7     ifself.scaled_img:
8         painter =QPainter()
9 painter.begin(self)
10 painter.drawPixmap(self.point, self.scaled_img)
11         painter.end()

2.拖动图片

在图片成功显示出来之后,需要能够去拖动图片,以便于查看图片的每个角落,主要得实现三个方法:mouseMoveEvent、mousePressEvent 和 mouseReleaseEvent,分别对应移动鼠标、点击鼠标和松开鼠标三个事件。

思路是获取鼠标点击时的位置,然后根据鼠标位置的变化来计算图片需要移动的距离,再移动图片就行了。具体代码如下:

1 defmouseMoveEvent(self, e):
2     """
3 mouse move events for the widget
4 :param e: QMouseEvent
5 :return:
6     """
7     ifself.left_click:
8         self.end_pos = e.pos() -self.start_pos
9         self.point = self.point +self.end_pos
10         self.start_pos =e.pos()
11 self.repaint()
12 
13 defmousePressEvent(self, e):
14     """
15 mouse press events for the widget
16 :param e: QMouseEvent
17 :return:
18     """
19     if e.button() ==Qt.LeftButton:
20         self.left_click =True
21         self.start_pos =e.pos()
22 
23 defmouseReleaseEvent(self, e):
24     """
25 mouse release events for the widget
26 :param e: QMouseEvent
27 :return:
28     """
29     if e.button() ==Qt.LeftButton:
30         self.left_click = False

3.打开文件

有时候我们会想打开本地的文件进行查看,所以还要实现一个打开文件的功能。而要实现这一功能,可以用 QFileDialog 类来实现,该类里有一个 getOpenFileName() 方法,使用该方法能够打开本地路径并选择符合文件要求格式的文件,例如使用“*.png”就支持打开所有 png 格式的图片文件,而不支持其他格式的文件。

getOpenFileName()方法有两个返回值,第一个返回值是所选择的文件的路径,第二个返回值是文件类型,得到文件路径后就能创建一个 QPixmap 对象,再使用前面显示图片的方法进行显示,具体代码如下:

1 defopen_image(self):
2     """
3 select image file and open it
4 :return:
5     """
6     img_name, _ = QFileDialog.getOpenFileName(self, "Open Image File", "*.jpg;;*.png;;*.jpeg")
7     self.box.set_image(img_name)

4.放大缩小图片

在查看图片的时候,有时候会需要放大了观看图片的某些细节部分,因而需要实现放大和缩小图片的功能,所以做了两个按钮分别用于放大图片和缩小图片。

在 QPainter 中,可以根据 QPainter 的坐标系进行各种变换,例如平移(translate)和变化(scale),这里就可以通过使用 scale() 方法实现放大和缩小图片。下面是两个按钮点击时触发的方法的具体代码:

1 deflarge_click(self):
2     """
3 used to enlarge image
4 :return:
5     """
6     if self.box.scale < 2:
7         self.box.scale += 0.1
8 self.box.adjustSize()
9 self.update()
10 
11 defsmall_click(self):
12     """
13 used to reduce image
14 :return:
15     """
16     if self.box.scale > 0.1:
17         self.box.scale -= 0.2
18 self.box.adjustSize()
19         self.update()

完整代码已上传到 GitHub

免责声明:文章转载自《使用 PyQt5 实现图片查看器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)mstsc局域网远程 要预先做的设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pyqt5学习之QPushButton

QPushButton继承于基类QAbstractButton;QAbstractButton的方法QPushButton都可以用;用来给用户点击,来完成某种动作的控件 案例: 控件建立 扁平化 简单菜单建立 右击菜单建立 from PyQt5.Qt import * import sys # *************控件建立**********...

PyQt5窗口操作大全

1、多窗口交互-使用信号与槽函数'''如果一个窗口和一个窗口交互,尽量不要访问窗口B的控件;应该访问与信号绑定的槽函数,从而降低窗口之间的耦合度例:如果A直接访问B窗口的控件,一旦B窗口的控件发生改变,则A和B的代码都需发生变化如果A访问B中的信号,则B靠近发生改变,则只需要改变B中的代码,而不需要改变A的代码核心思想:1、先设计好子窗口,并且在子窗口里面...

PyQt5-箱布局(QHBoxLayout, QVBoxLayout)-9

1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 4 ''' 即横向和纵向布局:QHBoxLayout, QVBoxLayout ''' 5 6 import sys 7 from PyQt5.QtWidgets import (QWidget, QPushButton,...

pyqt5学习之QThread

       pyqt的线程的使用非常简单-建立一个自定义的类(如thread),使它继承自QThread,并实现其run()方法即可; 在使用线程时可以直接得到thread实例,调用其start()函数即可启动线程。线程启动后,会自动调用其实现run方法,该方法就是线程的执行函数。        业务的线程任务就写在run()函数中,当run()退出之后...

PyQt5设置图片格式及动画

1、缩放图片'''使用QImage.Scale(width,height)方法可以来设置图片'''from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *import sysclass scaleimage(QWidget): def __ini...

[ PyQt入门教程 ] PyQt5中数据表格控件QTableWidget使用方法

如果你想让你开发的PyQt5工具展示的数据显得整齐、美观、好看,显得符合你的气质,可以考虑使用QTableWidget控件。之前一直使用的是textBrowser文本框控件,数据展示还是不太美观。其中QTableWidget是PyQt5程序中常用的显示数据表格的控件,显示的基本效果如下,有点素。。 下面开始介绍QTableWidget常用的方法以及如何使...