PyQt5入门——QListWidget实现图片缩略图列表
需求描述
最近在写一个图像标注小工具,其中需要用到一个缩略图列表,来查看文件夹内的图片文件。
这里整理一个基于QListWidget实现的版本,简单可用。
示例效果
代码示例
QListWidget官方文档:[link]
其中,需要用到的QListWidget信号:
- itemSelectionChanged:所选项发生变化时发送。
先定义缩略图列表部分,继承自QListWidget。每个QListWidgetItem可以设置QIcon图片和文本。
import os
from qtpy.QtCore import QSize
from qtpy.QtGui import QIcon,QPixmap
from PyQt5.QtWidgets import QListWidget,QListWidgetItem,QListView,QWidget,QApplication,QHBoxLayout,QLabelclass ImageListWidget(QListWidget):def __init__(self):super(ImageListWidget, self).__init__()self.setFlow(QListView.Flow(1))#0: left to right,1: top to bottomself.setIconSize(QSize(150,100))def add_image_items(self,image_paths=[]):for img_path in image_paths:if os.path.isfile(img_path):img_name = os.path.basename(img_path)item = QListWidgetItem(QIcon(img_path),img_name)# item.setText(img_name)# item.setIcon(QIcon(img_path))self.addItem(item)
再来简单布局下窗体控件:
左边区域用QLabel加载图像,右边区域是图片缩略图列表,点击缩略图,可以在左边查看大图。
class ImageViewerWidget(QWidget):def __init__(self):super(QWidget, self).__init__()# 显示控件self.list_widget = ImageListWidget()self.list_widget.setMinimumWidth(200)self.show_label = QLabel(self)self.show_label.setFixedSize(600,400)self.image_paths = []self.currentImgIdx = 0self.currentImg = None# 水平布局self.layout = QHBoxLayout(self)self.layout.addWidget(self.show_label)self.layout.addWidget(self.list_widget)# 信号与连接self.list_widget.itemSelectionChanged.connect(self.loadImage)def load_from_paths(self,img_paths=[]):self.image_paths = img_pathsself.list_widget.add_image_items(img_paths)def loadImage(self):self.currentImgIdx = self.list_widget.currentIndex().row()if self.currentImgIdx in range(len(self.image_paths)):self.currentImg = QPixmap(self.image_paths[self.currentImgIdx]).scaledToHeight(400)self.show_label.setPixmap(self.currentImg)
加载一些图片路径,并运行窗口:
if __name__=="__main__":import sysapp = QApplication(sys.argv)# 图像路径img_dir = r"E:\Pic"filenames = os.listdir(img_dir)img_paths=[]for file in filenames:if file[-4:]==".png" or file[-4:]==".jpg":img_paths.append(os.path.join(img_dir,file))# 显示控件main_widget = ImageViewerWidget()main_widget.load_from_paths(img_paths)main_widget.setWindowTitle("ImageViewer")main_widget.show()# 应用程序运行sys.exit(app.exec_())
小结
- 上面代码只是一个实现思路,实际应用中最好另开一个线程加载图片,并且随着滚动条下拉,再不断加载缓存。
- QListWidget可以实现简单的图标+文字列表,如果列表项中涉及自定义控件和其他操作逻辑,建议采用QListView和Model实现。
PyQt5入门——QListWidget实现图片缩略图列表相关推荐
- 插件 KSImageNamed 用图片时自动显示图片缩略图
https://github.com/ksuther/KSImageNamed-Xcode 也是非常残暴的一个功能,在开发中我们的图片名称都是fb_poinum_high类似的,用这个插件敲出前缀就能 ...
- google vr 入门之VrPanoramaView制作全景图列表,apm应用性能管理
思路就是这么简单,这里的全景图我们需要对应的全景图控件来显示,google vr 中有对应的全景图控件VrPanoramaView,google vr 的核心是其父类VrWidgetView,VrPa ...
- 点击图片缩略图放大展示效果的实现
点击图片缩略图放大展示效果的实现 最近实现的easyUI查询数据列表中有展示图片的功能,为了能更好方便用户查看图片缩略图的内容,增加了点击图片放大的效果,下边是实现后的效果以及实现方法 点击放 ...
- HTML 字体标签 图片标签 列表标签 链接标签 div span 语义化标签 表格标签
文章目录 HTML 字体标签 图片标签 列表标签 链接标签 div span 语义化标签 表格标签 HTML 概念:是最基础的网页开发语言 Hyper text markup language 超文本 ...
- PyQt5入门——学生管理系统
需要源代码的家人们直接评论区或者私信我 文章目录 PyQt5入门--学生管理系统 1. 项目背景 2. 项目简介 2.1 项目内容 2.2 数据说明 3. 相关工具介绍 3.1Python 3.6 3 ...
- python制作图片缩略图
缩略图 在很多时候我们都需要将图片按照同比例缩小有利于存储 但是一张张手动去改的话太麻烦了 今天我们就用python实现一个简单的将一个文件夹中的所有图片进行指定大小的调整 缩略前: 代码: impo ...
- 仿微信查看系统图片缩略图选择多张图片
最近做的项目有用到查看系统图片并选择多张图片的功能,网上搜索了一些源码运行起来,拖动一下缩略图列表就卡住了,都是没有考虑到OOM的原因.结合网上的一些LRUCACHE和ASYNCTASK资料,自己写了 ...
- android获取图片缩略图,Android系获取图片和视频的缩略图
获取手机里视频缩略图: public static Bitmap getVideoThumbnail(ContentResolver cr,Uri uri) { Bitmap bitmap = nul ...
- layui上传图片列表展示_layui怎么做图片在列表中显示 | 学步园
layui table中显示图片的方法: 图片需要用到模板.templet: 注意div不可省略,48px指的是div的高度,如果要决定img图片的高度,需要单独设计style ',style:'he ...
最新文章
- python networkx模块,python复杂网络处理模块networkx
- Centos7常用命令[文件和目录]
- dataset__getitem___PyTorch源码解析与实践(1):数据加载Dataset,Sampler与DataLoader
- python怎么读取excel某一行某一列-python3读取excel文件只提取某些行某些列的值方法...
- 只剩 1 天 | 神策 2019 数据驱动大会明天开幕
- LeetCode Wiggle Sort II
- 《设计模式之禅》--空对象模式
- 微信又出隐藏“技能”,一夜之间朋友圈刷屏了
- 汽油与消费需求问题的MonteCarlo求解方法
- 利用docker容器ubuntu安装truecrypt
- 关于在Google Earth中动态加载地标问题
- duckduckgo搜索引擎_谷歌 Chrome 浏览器添加 DuckDuckGo 搜索引擎
- python字符串格式化是什么意思_python字符串格式化什么意思
- 2022金三银四,面试求生指南
- redis--ServiceStack
- word 插入脚注尾注和删除页眉页脚
- 每天五分钟机器学习:评价算法模型常用的数值评估方式——F1值
- MATLAB实现利用三个不共线的点绘制圆(包括圆心和半径的求解)
- 软件工程领域CCF B类会议:SANER介绍(以SANER 2019为例)
- Android必知必会-Stetho调试工具
热门文章
- 通过Repository Manager 1.3来管理戴尔驱动程序更新
- TypeScript入门教程 之 for ... of 与 for ... in
- 面试精讲之面试考点及大厂真题 - 分布式专栏 23 分布式系统下分布式锁的实现
- 面试官系统精讲Java源码及大厂真题 - 21 DelayQueue 源码解析
- NodeJS使用淘宝 NPM 镜像/NPM使用国内源
- STP生成树的选举详细步骤、四个案列详解(附图,建议电脑观看)
- 不重启docker容器修改 容器中的时区
- 1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
- 【C语言】逗号运算符的使用举例
- 一种通用的动作解决方案