需求描述

最近在写一个图像标注小工具,其中需要用到一个缩略图列表,来查看文件夹内的图片文件。

这里整理一个基于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实现图片缩略图列表相关推荐

  1. 插件 KSImageNamed 用图片时自动显示图片缩略图

    https://github.com/ksuther/KSImageNamed-Xcode 也是非常残暴的一个功能,在开发中我们的图片名称都是fb_poinum_high类似的,用这个插件敲出前缀就能 ...

  2. google vr 入门之VrPanoramaView制作全景图列表,apm应用性能管理

    思路就是这么简单,这里的全景图我们需要对应的全景图控件来显示,google vr 中有对应的全景图控件VrPanoramaView,google vr 的核心是其父类VrWidgetView,VrPa ...

  3. 点击图片缩略图放大展示效果的实现

    点击图片缩略图放大展示效果的实现     最近实现的easyUI查询数据列表中有展示图片的功能,为了能更好方便用户查看图片缩略图的内容,增加了点击图片放大的效果,下边是实现后的效果以及实现方法 点击放 ...

  4. HTML 字体标签 图片标签 列表标签 链接标签 div span 语义化标签 表格标签

    文章目录 HTML 字体标签 图片标签 列表标签 链接标签 div span 语义化标签 表格标签 HTML 概念:是最基础的网页开发语言 Hyper text markup language 超文本 ...

  5. PyQt5入门——学生管理系统

    需要源代码的家人们直接评论区或者私信我 文章目录 PyQt5入门--学生管理系统 1. 项目背景 2. 项目简介 2.1 项目内容 2.2 数据说明 3. 相关工具介绍 3.1Python 3.6 3 ...

  6. python制作图片缩略图

    缩略图 在很多时候我们都需要将图片按照同比例缩小有利于存储 但是一张张手动去改的话太麻烦了 今天我们就用python实现一个简单的将一个文件夹中的所有图片进行指定大小的调整 缩略前: 代码: impo ...

  7. 仿微信查看系统图片缩略图选择多张图片

    最近做的项目有用到查看系统图片并选择多张图片的功能,网上搜索了一些源码运行起来,拖动一下缩略图列表就卡住了,都是没有考虑到OOM的原因.结合网上的一些LRUCACHE和ASYNCTASK资料,自己写了 ...

  8. android获取图片缩略图,Android系获取图片和视频的缩略图

    获取手机里视频缩略图: public static Bitmap getVideoThumbnail(ContentResolver cr,Uri uri) { Bitmap bitmap = nul ...

  9. layui上传图片列表展示_layui怎么做图片在列表中显示 | 学步园

    layui table中显示图片的方法: 图片需要用到模板.templet: 注意div不可省略,48px指的是div的高度,如果要决定img图片的高度,需要单独设计style ',style:'he ...

最新文章

  1. python networkx模块,python复杂网络处理模块networkx
  2. Centos7常用命令[文件和目录]
  3. dataset__getitem___PyTorch源码解析与实践(1):数据加载Dataset,Sampler与DataLoader
  4. python怎么读取excel某一行某一列-python3读取excel文件只提取某些行某些列的值方法...
  5. 只剩 1 天 | 神策 2019 数据驱动大会明天开幕
  6. LeetCode Wiggle Sort II
  7. 《设计模式之禅》--空对象模式
  8. 微信又出隐藏“技能”,一夜之间朋友圈刷屏了
  9. 汽油与消费需求问题的MonteCarlo求解方法
  10. 利用docker容器ubuntu安装truecrypt
  11. 关于在Google Earth中动态加载地标问题
  12. duckduckgo搜索引擎_谷歌 Chrome 浏览器添加 DuckDuckGo 搜索引擎
  13. python字符串格式化是什么意思_python字符串格式化什么意思
  14. 2022金三银四,面试求生指南
  15. redis--ServiceStack
  16. word 插入脚注尾注和删除页眉页脚
  17. 每天五分钟机器学习:评价算法模型常用的数值评估方式——F1值
  18. MATLAB实现利用三个不共线的点绘制圆(包括圆心和半径的求解)
  19. 软件工程领域CCF B类会议:SANER介绍(以SANER 2019为例)
  20. Android必知必会-Stetho调试工具

热门文章

  1. 通过Repository Manager 1.3来管理戴尔驱动程序更新
  2. TypeScript入门教程 之 for ... of 与 for ... in
  3. 面试精讲之面试考点及大厂真题 - 分布式专栏 23 分布式系统下分布式锁的实现
  4. 面试官系统精讲Java源码及大厂真题 - 21 DelayQueue 源码解析
  5. NodeJS使用淘宝 NPM 镜像/NPM使用国内源
  6. STP生成树的选举详细步骤、四个案列详解(附图,建议电脑观看)
  7. 不重启docker容器修改 容器中的时区
  8. 1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
  9. 【C语言】逗号运算符的使用举例
  10. 一种通用的动作解决方案