pyqt5按选择顺序多选图并显示缩略图

2024-08-21 11:36

本文主要是介绍pyqt5按选择顺序多选图并显示缩略图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了实现用户在选择图片时可以看到缩略图,并且按点击顺序显示最终的选择,我们可以自定义一个对话框,展示所有可选图片的缩略图,用户点击图片后会将其记录到列表中,并最终按顺序显示选择的缩略图。

解决方案思路:

  1. 自定义选择对话框:展示所有图片的缩略图,用户可以点击选择图片。
  2. 按点击顺序记录选择:记录用户点击图片的顺序。
  3. 显示选择结果:在主窗口中按点击顺序显示最终选择的图片缩略图。

实现步骤:

  1. 创建一个自定义对话框,加载文件夹内的图片,并显示为缩略图。
  2. 用户点击缩略图时,记录下点击的顺序。
  3. 用户确认选择后,按顺序在主窗口中显示缩略图。

完整示例代码: 

import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QScrollArea, QGridLayout, QFileDialog, QDialog, QHBoxLayout
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qtclass ThumbnailDialog(QDialog):def __init__(self, folder_path, parent=None):super().__init__(parent)self.setWindowTitle("Select Images")self.selected_files = []# 创建主布局self.layout = QVBoxLayout()self.grid_layout = QGridLayout()self.layout.addLayout(self.grid_layout)# 加载文件夹中的所有图片并显示为缩略图self.load_images(folder_path)# 确认按钮self.confirm_button = QPushButton('Confirm Selection')self.confirm_button.clicked.connect(self.accept)self.layout.addWidget(self.confirm_button)self.setLayout(self.layout)def load_images(self, folder_path):images = [f for f in os.listdir(folder_path) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]row, col = 0, 0for image_file in images:image_path = os.path.join(folder_path, image_file)pixmap = QPixmap(image_path).scaled(100, 100, Qt.KeepAspectRatio, Qt.SmoothTransformation)label = QLabel()label.setPixmap(pixmap)label.setAlignment(Qt.AlignCenter)label.mousePressEvent = lambda event, path=image_path: self.select_image(path)self.grid_layout.addWidget(label, row, col)col += 1if col > 3:  # 每行4个缩略图col = 0row += 1def select_image(self, image_path):if image_path not in self.selected_files:self.selected_files.append(image_path)print(f"Selected: {image_path}")def exec_(self):super().exec_()return self.selected_filesclass ImageSelector(QWidget):def __init__(self):super().__init__()# 设置窗口标题和大小self.setWindowTitle("Image Selector")self.setGeometry(100, 100, 800, 600)# 创建布局self.layout = QVBoxLayout()# 创建一个按钮用于选择图片self.select_button = QPushButton('Select Images')self.select_button.clicked.connect(self.open_folder_dialog)self.layout.addWidget(self.select_button)# 创建一个滚动区域来显示图片self.scroll_area = QScrollArea()self.scroll_area_widget = QWidget()self.grid_layout = QGridLayout(self.scroll_area_widget)self.scroll_area.setWidgetResizable(True)self.scroll_area.setWidget(self.scroll_area_widget)self.layout.addWidget(self.scroll_area)# 设置主布局self.setLayout(self.layout)def open_folder_dialog(self):# 打开文件夹对话框,用户选择一个文件夹folder_path = QFileDialog.getExistingDirectory(self, "Select Folder")if folder_path:# 打开自定义对话框,显示缩略图dialog = ThumbnailDialog(folder_path, self)selected_files = dialog.exec_()if selected_files:self.display_images(selected_files)def display_images(self, files):# 清除之前的布局内容for i in reversed(range(self.grid_layout.count())):widget_to_remove = self.grid_layout.itemAt(i).widget()self.grid_layout.removeWidget(widget_to_remove)widget_to_remove.setParent(None)# 按选择顺序显示缩略图for index, file in enumerate(files):pixmap = QPixmap(file).scaled(100, 100, Qt.KeepAspectRatio, Qt.SmoothTransformation)label = QLabel()label.setPixmap(pixmap)label.setAlignment(Qt.AlignCenter)self.grid_layout.addWidget(label, index // 4, index % 4)if __name__ == '__main__':app = QApplication(sys.argv)window = ImageSelector()window.show()sys.exit(app.exec_())

代码解释:

  1. ThumbnailDialog:自定义对话框,用于显示指定文件夹中的所有图片缩略图。

    • load_images() 方法会加载并显示文件夹中的图片。
    • select_image() 方法记录用户点击的图片顺序。
    • exec_() 方法返回用户按点击顺序选择的图片列表。
  2. ImageSelector:主窗口类。

    • open_folder_dialog() 打开文件夹选择对话框,并显示 ThumbnailDialog 对话框,供用户选择图片。
    • display_images() 按选择顺序显示图片缩略图。

运行效果:

用户选择一个文件夹后,自定义的 ThumbnailDialog 会显示文件夹中的所有图片缩略图。用户可以点击选择图片,点击顺序将被记录,并在主窗口中按顺序显示这些图片的缩略图。

 

这篇关于pyqt5按选择顺序多选图并显示缩略图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093050

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

PyQt5 QDate类的具体使用

《PyQt5QDate类的具体使用》QDate是PyQt5中处理日期的核心类,本文主要介绍了PyQt5QDate类的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录核心功能常用方法及代码示例​1. 创建日期对象​2. 获取日期信息​3. 日期计算与比较​4. 日

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件