python实现压缩包图片预览与收藏功能

 更新时间:2025年09月13日 11:44:47   作者:winfredzhang  
在日常处理图片资料时,我们经常会遇到大量打包在压缩文件中的照片,逐个解压再查看不仅麻烦,而且浪费时间,下面我们来看看如何使用Python实现压缩包图片预览与收藏功能吧

在日常处理图片资料时,我们经常会遇到大量打包在压缩文件中的照片。逐个解压再查看不仅麻烦,而且浪费时间。如果能在一个小工具里直接浏览压缩包中的照片,并支持将常用的压缩文件收藏起来,岂不是非常高效?

本文将介绍一个基于 wxPython 的小工具,它可以:

  • 遍历文件夹中的压缩文件(zip/rar/tar 等)
  • 选择压缩文件后自动解压缩并预览其中的图片
  • 收藏常用的压缩文件路径,点击收藏即可快速加载其内容

功能设计

整个界面分为 左右两部分

左侧列表区

  • archive_listbox:压缩文件列表
  • current_photo_listbox:当前压缩文件中的照片列表
  • favorite_listbox:收藏的压缩文件列表

右侧预览区

预览选中的照片,支持缩放显示

交互逻辑:

  • 选择一个压缩文件 → 自动解压缩到临时目录 → 显示所有图片
  • 点击 收藏 按钮 → 将选中的压缩文件路径加入收藏
  • 点击收藏列表中的项 → 自动解压并预览其中所有图片

关键实现

1. 压缩文件解压与图片筛选

解压功能统一由 extract_archive 处理,支持 zip/rar/tar 三种常见格式。

解压后会筛选出 .jpg/.png/.gif 等图片文件,显示在 current_photo_listbox 中。

def extract_archive(self, archive_path):
    """解压缩文件并列出其中的照片"""
    # 解压目录
    extract_dir = os.path.join(self.temp_dir, os.path.basename(archive_path))
    if os.path.exists(extract_dir):
        shutil.rmtree(extract_dir)
    os.makedirs(extract_dir)

    # 根据格式解压
    if archive_path.endswith(".zip"):
        with zipfile.ZipFile(archive_path, 'r') as zip_ref:
            zip_ref.extractall(extract_dir)
    elif archive_path.endswith(".rar"):
        with rarfile.RarFile(archive_path, 'r') as rar_ref:
            rar_ref.extractall(extract_dir)
    elif archive_path.endswith(".tar") or archive_path.endswith(".gz"):
        with tarfile.open(archive_path, 'r:*') as tar_ref:
            tar_ref.extractall(extract_dir)
    else:
        wx.CallAfter(self.status_text.SetLabel, "不支持的压缩格式")
        return

    # 列出照片
    photos = []
    for root, _, files in os.walk(extract_dir):
        for file in files:
            if file.lower().endswith((".png", ".jpg", ".jpeg", ".bmp", ".gif")):
                photos.append(os.path.join(root, file))

    wx.CallAfter(self.update_photo_list, photos)

2. 收藏功能

收藏按钮的逻辑是:获取当前 archive_listbox 选中的压缩文件路径,存储到 favorite_listbox 中。

def on_favorite(self, event):
    """收藏按钮事件"""
    selection = self.archive_listbox.GetSelection()
    if selection == wx.NOT_FOUND:
        wx.MessageBox("请先选择一个压缩文件", "提示", wx.OK | wx.ICON_INFORMATION)
        return

    archive_path = self.archive_listbox.GetClientData(selection)

    # 避免重复收藏
    for i in range(self.favorite_listbox.GetCount()):
        if self.favorite_listbox.GetClientData(i) == archive_path:
            wx.MessageBox("该压缩文件已经在收藏列表中", "提示", wx.OK | wx.ICON_INFORMATION)
            return

    display_text = os.path.basename(archive_path)
    self.favorite_listbox.Append(display_text, archive_path)
    self.status_text.SetLabel(f"已收藏: {display_text}")

3. 点击收藏项加载图片

收藏列表保存的是 压缩文件路径,当用户点击某个收藏项时,直接调用 extract_archive 来解压和加载照片。

def on_favorite_select(self, event):
    """收藏列表选择事件"""
    selection = self.favorite_listbox.GetSelection()
    if selection == wx.NOT_FOUND:
        return

    archive_path = self.favorite_listbox.GetClientData(selection)
    if not os.path.exists(archive_path):
        self.status_text.SetLabel(f"文件不存在: {archive_path}")
        wx.MessageBox(f"文件不存在: {archive_path}", "错误", wx.OK | wx.ICON_ERROR)
        return

    self.status_text.SetLabel(f"正在解压收藏文件: {os.path.basename(archive_path)}...")

    thread = threading.Thread(target=self.extract_archive, args=(archive_path,))
    thread.daemon = True
    thread.start()

这样用户只需点击收藏,就能快速打开常用的压缩包,无需再去文件夹里查找。

4. 图片预览

current_photo_listbox 选择某个图片时,右侧的 preview_panel 会用 wxPython 的 wx.StaticBitmap 显示缩略图:

def show_image(self, image_path):
    """显示图片"""
    image = wx.Image(image_path, wx.BITMAP_TYPE_ANY)
    W, H = self.preview_panel.GetClientSize()
    image = image.Scale(W, H, wx.IMAGE_QUALITY_HIGH)
    self.preview_bitmap.SetBitmap(wx.Bitmap(image))
    self.preview_panel.Refresh()

运行效果

  • 左侧加载文件夹,自动扫描压缩文件
  • 点击某个压缩文件 → 解压缩并显示照片
  • 点击 收藏 → 压缩文件加入收藏列表
  • 点击收藏项 → 自动解压并显示照片

整个操作流程非常直观,特别适合整理和浏览打包好的图片资源。

运行结果

到此这篇关于python实现压缩包图片预览与收藏功能的文章就介绍到这了,更多相关python图片预览内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python与Java互操作的五种主流方式

    Python与Java互操作的五种主流方式

    在企业级应用开发中,Python 和 Java 常常需要协同工作——Python 擅长数据科学和快速原型开发,Java 则在大型系统和高性能后端方面表现优异,本指南将全面介绍 Python 与 Java 互操作的 5 种主流方式,需要的朋友可以参考下
    2025-11-11
  • Python人工智能实战之对话机器人的实现

    Python人工智能实战之对话机器人的实现

    本文将通过Python开发一个可以讲笑话的机器人,可以自由定制功能,想讲几个笑话就讲几个笑话。文中的示例代码讲解详细,感兴趣的可以动手试一试
    2022-02-02
  • Python入门教程(二十四)Python的迭代器

    Python入门教程(二十四)Python的迭代器

    这篇文章主要介绍了Python入门教程(二十四)Python的迭代器,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • Python使用修饰器进行异常日志记录操作示例

    Python使用修饰器进行异常日志记录操作示例

    这篇文章主要介绍了Python使用修饰器进行异常日志记录操作,结合实例形式分析了Python基于修饰器的log日志文件操作的相关实现技巧,需要的朋友可以参考下
    2019-03-03
  • Python实现绘制多角星实例

    Python实现绘制多角星实例

    这篇文章要给大家分享Python实现绘制多角星的实例,在具备一定的Python编程基础以后,我们可以结合for循环进行多角星的编写,只要简单的几次循环,即可以极大的解决重复编写相同代码方面的问题,下面小编将以三角星,五角星为例,进而引入如何绘制多角星,需要的朋友可以参考一下
    2021-11-11
  • pygame实现滑块接小球游戏

    pygame实现滑块接小球游戏

    这篇文章主要为大家详细介绍了pygame实现滑块接小球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Python 异步之如何保护任务免于取消详解

    Python 异步之如何保护任务免于取消详解

    这篇文章主要为大家介绍了Python 异步之如何保护任务免于取消示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 深度定制Python的Flask框架开发环境的一些技巧总结

    深度定制Python的Flask框架开发环境的一些技巧总结

    现在越来越多的人使用virtualenv虚拟环境部署Python项目,包括针对框架的实例文件夹与版本控制布置,这里我们就来整理关于深度定制Python的Flask框架开发环境的一些技巧总结
    2016-07-07
  • 详解Python遍历列表时删除元素的正确做法

    详解Python遍历列表时删除元素的正确做法

    这篇文章主要介绍了详解Python遍历列表时删除元素的正确做法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python使用Flask后端实现解析Excel图表(附源码)

    Python使用Flask后端实现解析Excel图表(附源码)

    这篇文章主要介绍了一个完整的 Flask + Vue 3 前端模板 方案,实现 上传 Excel 文件(不再用链接),后端解析 chart1.xml,返回结构化数据,前端用 ECharts 渲染图表,感兴趣的小伙伴可以了解下
    2026-01-01

最新评论