在日常办公或文件管理场景中,我们经常面临这样的问题:在一个文件夹中短时间内产生了大量不同类型的文件(如图片、pdf、word、excel),我们需要快速浏览和筛选这些文件的内容,却不希望一个个打开它们。有没有办法将这些文件集中预览、筛选和操作?
本文将带你打造一个基于 wxpython 的多格式文件浏览与预览工具,支持文件夹选择、最近一天文件筛选、图文文档预览、页码控制、压缩打包、文件复制等多项实用功能。
一、功能概览
该工具具备以下核心功能:
文件夹选择:通过 gui 选择任意文件夹。
筛选最新文件:自动列出过去 24 小时内修改或创建的文件。
多类型预览支持:
- 图片(jpg/png/bmp/gif)
- pdf(支持翻页)
- word(.docx,以 html 模式显示)
- excel(显示为列表控件)
文件复选操作:支持对文件进行勾选,便于批量操作。
文件压缩与复制:将勾选文件打包为 zip,或复制到目标文件夹。
分页预览控制:针对 pdf,提供上一页/下一页导航按钮。
二、应用场景
这个工具适用于以下典型场景:
- 企业文档审核:在文档提交截止前查看最近更新的项目文档。
- 技术支持或维护日志审核:快速翻阅技术支持部门刚上传的截图、报告、系统日志。
- 内容策划与编辑:在多媒体内容创作场景中,快速预览当天采集的素材。
- 文件归档前审查:在正式归档前核查文档内容和格式。
三、界面布局与技术实现
1. 总体结构:splitterwindow 分割主界面
self.splitter = wx.splitterwindow(self) self.left_panel = wx.panel(self.splitter) self.right_panel = wx.panel(self.splitter) self.splitter.splitvertically(self.left_panel, self.right_panel)
- 左侧用于显示文件列表、控制按钮;
- 右侧用于显示预览内容和翻页控件。
2. 文件筛选逻辑:列出最近 24 小时文件
one_day_ago = time.time() - (24 * 60 * 60) for root, dirs, filenames in os.walk(folder_path): for filename in filenames: file_path = os.path.join(root, filename) if os.path.getmtime(file_path) >= one_day_ago: files.append(file_path)
这段代码遍历目标文件夹及其子目录,只保留“修改时间在过去 24 小时之内”的文件。
3. 多格式文件预览实现
图片预览
img = wx.image(file_path, wx.bitmap_type_any) img = img.scale(preview_size.width, preview_size.height) self.image_preview.setbitmap(wx.bitmap(img))
使用 wx.image 载入并缩放图像,然后通过 wx.staticbitmap 显示。
pdf 预览(支持翻页)
self.doc = fitz.open(file_path) page = self.doc[self.current_page] pix = page.get_pixmap(matrix=fitz.matrix(1.5, 1.5)) img = wx.image(pix.width, pix.height, pix.samples)
借助 pymupdf(即 fitz),将 pdf 页渲染成图像,再通过 wxwidgets 展示。
word 预览
doc = docx.document(file_path) html = "<html><body>" + "".join(f"<p>{para.text}</p>" for para in doc.paragraphs) + "</body></html>" self.doc_preview.setpage(html)
word 内容解析为 html,再使用 wx.html2.webview 来显示。
excel 预览
df = pd.read_excel(file_path) for i, col in enumerate(df.columns): self.excel_preview.insertcolumn(i, str(col)) for index, row in df.iterrows(): self.excel_preview.insertitem(index, str(row[0]))
利用 pandas 读取表格并填入 wx.listctrl 控件中。
4. 文件压缩与复制按钮(待补充功能)
self.zip_button = wx.button(button_panel, label="压缩选择文件") self.copy_button = wx.button(button_panel, label="复制选择文件")
目前绑定事件函数尚未实现(代码略去),后续可以通过 zipfile.zipfile 实现 zip 操作,使用 shutil.copy 进行文件复制。
运行结果
到此这篇关于python实现多格式文件预览工具的文章就介绍到这了,更多相关python文件预览内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论