新闻动态

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

发布日期:2022-01-13 16:10 | 文章来源:gibhub

需求描述

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

这里整理一个基于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图片缩略图内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部