PyQt5入门之基于QListWidget版本实现图片缩略图列表功能

 更新时间:2021年09月09日 08:45:05   作者:虾米小馄饨  
这篇文章主要介绍了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,QLabel

class ImageListWidget(QListWidget):
    def __init__(self):
        super(ImageListWidget, self).__init__()
        self.setFlow(QListView.Flow(1))#0: left to right,1: top to bottom
        self.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 = 0
        self.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_paths
        self.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 sys
    app = 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实现图片缩略图列表功能的文章就介绍到这了,更多相关PyQt5 QListWidget图片缩略图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python利用shutil实现拷贝文件功能

    Python利用shutil实现拷贝文件功能

    shutil 是一个 Python 内置模块,该模块对文件的复制、删除和压缩等操作都提供了非常方便的支持。本文将利用shutil实现拷贝文件功能,需要的可以参考一下
    2022-07-07
  • Python初学者必备的文件读写指南

    Python初学者必备的文件读写指南

    今天给大家带来的是关于Python基础的相关知识,文章围绕着Python文件读写展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Python中dict和set的用法讲解

    Python中dict和set的用法讲解

    今天小编就为大家分享一篇关于Python中dict和set的用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Python项目跨域问题解决方案

    Python项目跨域问题解决方案

    这篇文章主要介绍了Python项目跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 75条笑死人的知乎神回复,用60行代码就爬完了

    75条笑死人的知乎神回复,用60行代码就爬完了

    这篇文章主要介绍了python爬取知乎回复,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python中ThreadPoolExecutor线程池和ProcessPoolExecutor进程池

    python中ThreadPoolExecutor线程池和ProcessPoolExecutor进程池

    这篇文章主要介绍了python中ThreadPoolExecutor线程池和ProcessPoolExecutor进程池,文章围绕主题相关资料展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • pip安装python库的方法总结

    pip安装python库的方法总结

    在本篇文章里小编给大家分享了关于使用pip安装python库的几种常用方法,有需要的朋友们可以参考下。
    2019-08-08
  • python3 pillow模块实现简单验证码

    python3 pillow模块实现简单验证码

    这篇文章主要为大家详细介绍了python3 pillow模块实现简单验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 使用Pandas进行Excel数据处理的操作和技巧

    使用Pandas进行Excel数据处理的操作和技巧

    在数据处理和分析的过程中,Excel是一个非常常见的工具,然而,当数据量变大,操作复杂度增加时,Excel的效率和功能可能无法满足需求,Pandas是一个强大的Python数据处理库,本文将介绍如何使用Pandas进行Excel数据处理,并展示一些常见的操作和技巧
    2023-11-11
  • python中entry用法讲解

    python中entry用法讲解

    在本篇文章里小编给大家整理的是一篇关于python中entry用法讲解内容,有兴趣的朋友们可以学习参考下。
    2020-12-12

最新评论