python實現(xiàn)壓縮包圖片預覽與收藏功能
在日常處理圖片資料時,我們經常會遇到大量打包在壓縮文件中的照片。逐個解壓再查看不僅麻煩,而且浪費時間。如果能在一個小工具里直接瀏覽壓縮包中的照片,并支持將常用的壓縮文件收藏起來,豈不是非常高效?
本文將介紹一個基于 wxPython 的小工具,它可以:
- 遍歷文件夾中的壓縮文件(zip/rar/tar 等)
- 選擇壓縮文件后自動解壓縮并預覽其中的圖片
- 收藏常用的壓縮文件路徑,點擊收藏即可快速加載其內容
功能設計
整個界面分為 左右兩部分:
左側列表區(qū)
archive_listbox:壓縮文件列表current_photo_listbox:當前壓縮文件中的照片列表favorite_listbox:收藏的壓縮文件列表
右側預覽區(qū)
預覽選中的照片,支持縮放顯示
交互邏輯:
- 選擇一個壓縮文件 → 自動解壓縮到臨時目錄 → 顯示所有圖片
- 點擊 收藏 按鈕 → 將選中的壓縮文件路徑加入收藏
- 點擊收藏列表中的項 → 自動解壓并預覽其中所有圖片
關鍵實現(xiàn)
1. 壓縮文件解壓與圖片篩選
解壓功能統(tǒng)一由 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實現(xiàn)壓縮包圖片預覽與收藏功能的文章就介紹到這了,更多相關python圖片預覽內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python人工智能實戰(zhàn)之對話機器人的實現(xiàn)
本文將通過Python開發(fā)一個可以講笑話的機器人,可以自由定制功能,想講幾個笑話就講幾個笑話。文中的示例代碼講解詳細,感興趣的可以動手試一試2022-02-02
深度定制Python的Flask框架開發(fā)環(huán)境的一些技巧總結
現(xiàn)在越來越多的人使用virtualenv虛擬環(huán)境部署Python項目,包括針對框架的實例文件夾與版本控制布置,這里我們就來整理關于深度定制Python的Flask框架開發(fā)環(huán)境的一些技巧總結2016-07-07
Python使用Flask后端實現(xiàn)解析Excel圖表(附源碼)
這篇文章主要介紹了一個完整的 Flask + Vue 3 前端模板 方案,實現(xiàn) 上傳 Excel 文件(不再用鏈接),后端解析 chart1.xml,返回結構化數據,前端用 ECharts 渲染圖表,感興趣的小伙伴可以了解下2026-01-01

