python實(shí)現(xiàn)壓縮包圖片預(yù)覽與收藏功能
在日常處理圖片資料時(shí),我們經(jīng)常會(huì)遇到大量打包在壓縮文件中的照片。逐個(gè)解壓再查看不僅麻煩,而且浪費(fèi)時(shí)間。如果能在一個(gè)小工具里直接瀏覽壓縮包中的照片,并支持將常用的壓縮文件收藏起來(lái),豈不是非常高效?
本文將介紹一個(gè)基于 wxPython 的小工具,它可以:
- 遍歷文件夾中的壓縮文件(zip/rar/tar 等)
- 選擇壓縮文件后自動(dòng)解壓縮并預(yù)覽其中的圖片
- 收藏常用的壓縮文件路徑,點(diǎn)擊收藏即可快速加載其內(nèi)容
功能設(shè)計(jì)
整個(gè)界面分為 左右兩部分:
左側(cè)列表區(qū)
archive_listbox:壓縮文件列表current_photo_listbox:當(dāng)前壓縮文件中的照片列表favorite_listbox:收藏的壓縮文件列表
右側(cè)預(yù)覽區(qū)
預(yù)覽選中的照片,支持縮放顯示
交互邏輯:
- 選擇一個(gè)壓縮文件 → 自動(dòng)解壓縮到臨時(shí)目錄 → 顯示所有圖片
- 點(diǎn)擊 收藏 按鈕 → 將選中的壓縮文件路徑加入收藏
- 點(diǎn)擊收藏列表中的項(xiàng) → 自動(dòng)解壓并預(yù)覽其中所有圖片
關(guān)鍵實(shí)現(xiàn)
1. 壓縮文件解壓與圖片篩選
解壓功能統(tǒng)一由 extract_archive 處理,支持 zip/rar/tar 三種常見(jiàn)格式。
解壓后會(huì)篩選出 .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)
# 根據(jù)格式解壓
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. 收藏功能
收藏按鈕的邏輯是:獲取當(dāng)前 archive_listbox 選中的壓縮文件路徑,存儲(chǔ)到 favorite_listbox 中。
def on_favorite(self, event):
"""收藏按鈕事件"""
selection = self.archive_listbox.GetSelection()
if selection == wx.NOT_FOUND:
wx.MessageBox("請(qǐng)先選擇一個(gè)壓縮文件", "提示", wx.OK | wx.ICON_INFORMATION)
return
archive_path = self.archive_listbox.GetClientData(selection)
# 避免重復(fù)收藏
for i in range(self.favorite_listbox.GetCount()):
if self.favorite_listbox.GetClientData(i) == archive_path:
wx.MessageBox("該壓縮文件已經(jīng)在收藏列表中", "提示", 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. 點(diǎn)擊收藏項(xiàng)加載圖片
收藏列表保存的是 壓縮文件路徑,當(dāng)用戶(hù)點(diǎn)擊某個(gè)收藏項(xiàng)時(shí),直接調(diào)用 extract_archive 來(lái)解壓和加載照片。
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}", "錯(cuò)誤", 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()
這樣用戶(hù)只需點(diǎn)擊收藏,就能快速打開(kāi)常用的壓縮包,無(wú)需再去文件夾里查找。
4. 圖片預(yù)覽
在 current_photo_listbox 選擇某個(gè)圖片時(shí),右側(cè)的 preview_panel 會(huì)用 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()
運(yùn)行效果
- 左側(cè)加載文件夾,自動(dòng)掃描壓縮文件
- 點(diǎn)擊某個(gè)壓縮文件 → 解壓縮并顯示照片
- 點(diǎn)擊 收藏 → 壓縮文件加入收藏列表
- 點(diǎn)擊收藏項(xiàng) → 自動(dòng)解壓并顯示照片
整個(gè)操作流程非常直觀(guān),特別適合整理和瀏覽打包好的圖片資源。
運(yùn)行結(jié)果

到此這篇關(guān)于python實(shí)現(xiàn)壓縮包圖片預(yù)覽與收藏功能的文章就介紹到這了,更多相關(guān)python圖片預(yù)覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Matplotlib實(shí)現(xiàn)各種條形圖繪制
這篇文章主要介紹了Matplotlib實(shí)現(xiàn)各種條形圖繪制,文章通過(guò)利用 plt.bar 方法實(shí)現(xiàn)各種條形圖繪制,內(nèi)容詳細(xì)具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03
詳解python路徑拼接os.path.join()函數(shù)的用法
os.path.join()函數(shù):連接兩個(gè)或更多的路徑名組件。這篇文章主要介紹了python路徑拼接os.path.join()函數(shù)的用法,需要的朋友可以參考下2019-10-10
python中實(shí)現(xiàn)php的var_dump函數(shù)功能
這篇文章主要介紹了python中實(shí)現(xiàn)php的var_dump函數(shù)功能,var_dump函數(shù)在PHP中調(diào)試時(shí)非常實(shí)用,本文介紹在Python中實(shí)現(xiàn)這個(gè)函數(shù),需要的朋友可以參考下2015-01-01
腳本測(cè)試postman快速導(dǎo)出python接口測(cè)試過(guò)程示例
這篇文章主要介紹了關(guān)于腳本測(cè)試postman快速導(dǎo)出python接口測(cè)試示例的過(guò)程操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
深度解析Python中遞歸下降解析器的原理與實(shí)現(xiàn)
在編譯器設(shè)計(jì)、配置文件處理和數(shù)據(jù)轉(zhuǎn)換領(lǐng)域,遞歸下降解析器是最常用且最直觀(guān)的解析技術(shù),本文將詳細(xì)介紹遞歸下降解析器的原理與實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-08-08
python人人網(wǎng)登錄應(yīng)用實(shí)例
這篇文章主要介紹了python人人網(wǎng)登錄應(yīng)用實(shí)例,是一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下2014-09-09

