实现将截图预览,并按照顺序加入一个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图片浏览内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论