python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例


Posted in Python onFebruary 27, 2020

PyQt5图片显示控件QPixmap介绍

QPixmap类用于绘图设备的图像显示,它可以作为一个QPainterDevice对象,也可以加载到一个控件中,通常是标签或者按钮,用于在标签或按钮上显示图像

QPixmap可以读取的图像文件类型有BMP,GIF,JPG等

QPixmap类中常用的方法

方法 描述
copy() 从QRect对象复制到QPixmap对象
fromImage() 将QImage对象转换为QPixmap对象
grabWidget() 从给定的一个窗口小控件创建一个像素图
grabWindow() 在窗口创建数据的像素图
load() 加载图像文件作为QPixmap对象
save() 将QPixmap对象保存为文件
toImage() 将QPixmap对象转换为QImage对象

QPixmap的使用实例

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class QpixmapDemo(QWidget):
  def __init__(self,parent=None):
    super(QpixmapDemo, self).__init__(parent)
    self.setWindowTitle('QPixmap例子')

    layout=QVBoxLayout()

    lab1=QLabel()
    lab1.setPixmap(QPixmap('\images\python.jpg'))

    layout.addWidget(lab1)

    self.setLayout(layout)

if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo =QpixmapDemo()
  demo.show()
  sys.exit(app.exec_())

效果如图

python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例

代码分析

在这个例子中,使用setPixmap()将图像显示在QLabel上

lab1=QLabel()
    lab1.setPixmap(QPixmap('\images\python.jpg'))

QImage与QPixmap区别

不同平台,依赖、存储不同

QPixmap依赖于硬件,QImage不依赖于硬件。

在X11, Mac 以及 Symbian平台上。

QImage: 因为它是存储在客户端,往QImage上绘图比较快,但显示它则比较慢。QPixmap: 具体实现是依赖于系统的,它是存储在服务器端,往QPixmap上绘图比较慢,但显示它则比较快。但在Windows平台上则是是一样的,因为它们都存储在客户端,并不使用任何的GDI资源,可能看起来并没有多大区别。

目前的Qt会把QPixmap都存储在graphics memory中,这明显是依赖硬件的。因此我们对QPixmap的使用需要格外注意。

那么Qt为什么要这么做呢?很简单,设计之初QPixmap就是用来加速显示的,例如我们在paint的时候用QPixmap就会比用其他类的效果好许多。

用处分工不同

QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的。

当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。QPixmap绘制效果是最好的。

总结:

对于显示小图片时,可以用QPixmap进行加载,绘画图片。当绘画大图片时候,此时最好实现QImage进行加载,因为QImage本身主要是为图像I/O、图片访问和像素修改而设计的,它可以实现对图片旋转、缩放等。然后通过QPixmap实现绘图。

本文详细介绍了PyQt5图片显示控件QPixmap详细使用方法与实例,还包括PyQt5中QImage控件与QPixmap控件的区别,更多关于这方面的知识请查看下面的相关链接

Python 相关文章推荐
python的变量与赋值详细分析
Nov 08 Python
对Python中的@classmethod用法详解
Apr 21 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
python3对接mysql数据库实例详解
Apr 30 Python
Python基本数据结构之字典类型dict用法分析
Jun 08 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
pycharm debug 断点调试心得分享
Apr 16 Python
看看如何用Python绘制小米新版天价logo
Apr 20 Python
python程序文件扩展名知识点详解
Feb 27 #Python
python读取多层嵌套文件夹中的文件实例
Feb 27 #Python
python统计文章中单词出现次数实例
Feb 27 #Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 #Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 #Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 #Python
Python如何使用OS模块调用cmd
Feb 27 #Python
You might like
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
python求pi的方法
2014/10/08 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
python实现宿舍管理系统
2019/11/22 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
2013的个人自我评价
2013/12/26 职场文书
求职信模板
2014/05/23 职场文书
骨干教师事迹材料
2014/12/17 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL