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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
使用Python实现下载网易云音乐的高清MV
Mar 16 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
django开发之settings.py中变量的全局引用详解
Mar 29 Python
神经网络相关之基础概念的讲解
Dec 29 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
python 函数中的参数类型
Feb 11 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
python dict如何定义
Sep 02 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
javascript学习之json入门
2016/12/22 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
python正则实现计算器功能
2017/12/14 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
优秀教师的感人事迹
2014/02/04 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
Python之基础函数案例详解
2021/08/30 Python
 Python 中 logging 模块使用详情
2022/03/03 Python