当前位置: 代码网 > it编程>前端脚本>Python > Python实现图片浏览和选择工具

Python实现图片浏览和选择工具

2025年05月19日 Python 我要评论
实现将截图预览,并按照顺序加入一个pdf文件中,实现照片管理尤其对于喜欢看教程截图做笔记的网友们。界面展示一、核心结构概述主类 imageviewer(wx.frame)是主窗口类,继承自 wx.fr

实现将截图预览,并按照顺序加入一个pdf文件中,实现照片管理尤其对于喜欢看教程截图做笔记的网友们。

界面展示

一、核心结构概述

主类 imageviewer(wx.frame)

是主窗口类,继承自 wx.frame

包括左侧文件浏览和图片列表、右侧图片预览区域。

支持的图片格式:['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff']

二、左侧区域(图片选择与操作)

1. 打开文件夹按钮

self.btn_open = wx.button(self.panel, label="打开文件夹")
self.btn_open.bind(wx.evt_button, self.on_open_dir)

打开目录,绑定 on_open_dir() 函数。

使用 wx.dirdialog 选择目录,读取支持格式的图片,显示到 listbox1。

2. 当前路径显示

self.path_text = wx.statictext(self.panel, label="当前路径: ")

显示当前选择的图片文件夹路径。

3. listbox1 — 图片列表

self.listbox1 = wx.listbox(...)
self.listbox1.bind(wx.evt_listbox, self.on_select_image1)
self.listbox1.bind(wx.evt_listbox_dclick, self.on_move_to_listbox2)

单击:预览该图片。

双击:将图片添加到 listbox2。

4. listbox2 — 已选图片

self.listbox2 = wx.listbox(...)
self.listbox2.bind(wx.evt_listbox, self.on_select_image2)

单击:预览。

存放用户选择的用于合并 pdf 的图片。

5. 移动按钮(上下移动排序)

self.btn_up.bind(wx.evt_button, self.on_move_up)
self.btn_down.bind(wx.evt_button, self.on_move_down)

可重新排列 listbox2 中的图片顺序(影响 pdf 顺序)。

6. 合并pdf按钮

self.btn_pdf = wx.button(...)
self.btn_pdf.bind(wx.evt_button, self.on_create_pdf)

用于触发将 listbox2 中图片合并生成 pdf 的逻辑(on_create_pdf() 需要你提供或补全)。

三、右侧区域(图片预览)

使用 scrolledpanel 可滚动区域显示图片

self.scroll_panel = scrolled.scrolledpanel(...)
self.img_preview = wx.staticbitmap(...)

scrolledpanel 允许在图片较大时滚动查看。

img_preview 是显示缩略图的主要控件。

四、主要方法详解

1.on_open_dir():打开文件夹,调用 load_images()

2.load_images():遍历文件夹,筛选支持的图片扩展名并按字母排序

3.on_select_image1() 和 on_select_image2():从 listbox1 或 listbox2 中选取图片后调用 display_image() 进行预览

4.display_image(img_path)

使用 pil 打开图片,根据最大尺寸 (480x580) 缩放显示

转为 wx.image -> wx.bitmap -> 显示在 img_preview 上

支持 rgb 和 rgba 格式

5.on_move_to_listbox2():将 listbox1 中双击的图片名称添加到 listbox2,防止重复

6.on_move_up() / on_move_down():更改 listbox2 中图片顺序,影响 pdf 合并顺序

五、缺失但预期存在的方法

on_create_pdf()

该方法虽然绑定了按钮,但代码未贴出。预期功能:

  • 获取 listbox2 中图片完整路径;
  • 使用 reportlab 创建 pdf 页面;
  • 每页插入一张图片(需缩放到 a4 页面);
  • 保存到文件。
def on_create_pdf(self, event):
    output_path = os.path.join(self.current_dir, "output.pdf")
    c = canvas.canvas(output_path, pagesize=a4)
    width, height = a4
    
    for i in range(self.listbox2.getcount()):
        filename = self.listbox2.getstring(i)
        img_path = os.path.join(self.current_dir, filename)
        
        try:
            pil_img = image.open(img_path)
            img_w, img_h = pil_img.size
            scale = min(width / img_w, height / img_h)
            new_w = img_w * scale
            new_h = img_h * scale
            
            c.drawimage(img_path, (width - new_w) / 2, (height - new_h) / 2, new_w, new_h)
            c.showpage()
        except exception as e:
            wx.messagebox(f"无法添加图片:{filename}\n{str(e)}", "错误", wx.icon_error)
    
    c.save()
    wx.messagebox("pdf合并完成!", "成功", wx.icon_information)

到此这篇关于python实现图片浏览和选择工具的文章就介绍到这了,更多相关python图片浏览内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com