Python使用wxPython打造文件批量壓縮工具
前言
在日常工作中,我們經(jīng)常需要將多個文件打包壓縮,傳統(tǒng)的方法是在文件管理器中手動選擇文件,右鍵壓縮。但當文件分散在不同位置,或者需要按特定順序壓縮時,這個過程就變得繁瑣起來。今天,我將分享如何使用 Python 的 wxPython 庫,創(chuàng)建一個功能強大的圖形化文件批量壓縮工具。
項目需求分析
在開始編碼之前,讓我們明確一下這個工具需要實現(xiàn)的功能:
- 支持多種方式添加文件(手動輸入路徑、文件選擇對話框、文件夾批量添加)
- 使用列表展示所有待壓縮文件
- 支持勾選機制,靈活選擇要壓縮的文件
- 按列表順序進行壓縮
- 壓縮完成后自動打開目標文件夾
- 跨平臺兼容(Windows、macOS、Linux)
技術選型
wxPython 是 Python 的跨平臺 GUI 工具包,它具有以下優(yōu)勢:
- 原生界面外觀,在不同操作系統(tǒng)上都有良好的用戶體驗
- 豐富的控件庫,滿足各種界面需求
- 文檔完善,社區(qū)活躍
- 性能優(yōu)秀,適合桌面應用開發(fā)
運行效果

核心實現(xiàn)
1. 界面布局設計
我們的界面采用垂直布局,自上而下分為四個主要區(qū)域:
main_sizer = wx.BoxSizer(wx.VERTICAL)
- 標題區(qū)域:顯示應用程序名稱
- 文件添加區(qū)域:提供多種添加文件的方式
- 文件列表區(qū)域:顯示所有文件并支持勾選
- 操作按鈕區(qū)域:執(zhí)行壓縮等操作
使用 StaticBoxSizer 可以為不同區(qū)域添加邊框和標題,讓界面層次分明:
input_box = wx.StaticBox(panel, label='添加文件') input_sizer = wx.StaticBoxSizer(input_box, wx.VERTICAL)
2. 多種文件添加方式
方式一:手動輸入路徑
使用多行 TextCtrl 組件,支持用戶粘貼完整文件路徑:
self.path_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE, size=(-1, 80))
添加路徑時進行驗證,確保文件存在:
def on_add_path(self, event):
path_text = self.path_text.GetValue().strip()
paths = [p.strip() for p in path_text.split('\n') if p.strip()]
for path in paths:
if os.path.exists(path) and os.path.isfile(path):
if path not in self.file_list:
self.file_list.append(path)
self.file_checklist.Append(path)
self.file_checklist.Check(self.file_checklist.GetCount() - 1)
方式二:文件選擇對話框
使用 wx.FileDialog 提供系統(tǒng)原生的文件選擇界面:
with wx.FileDialog(self, "選擇文件",
wildcard="所有文件 (*.*)|*.*",
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) as fileDialog:
if fileDialog.ShowModal() == wx.ID_CANCEL:
return
paths = fileDialog.GetPaths()
注意 wx.FD_MULTIPLE 標志允許用戶一次選擇多個文件。
方式三:文件夾批量添加
使用 wx.DirDialog 選擇文件夾,然后遍歷其中的所有文件:
def on_select_folder(self, event):
with wx.DirDialog(self, "選擇文件夾") as dirDialog:
if dirDialog.ShowModal() == wx.ID_CANCEL:
return
folder_path = dirDialog.GetPath()
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path):
# 添加到列表
3. 可勾選的文件列表
wx.CheckListBox 是實現(xiàn)勾選功能的關鍵組件,它結合了列表框和復選框的特性:
self.file_checklist = wx.CheckListBox(panel, size=(-1, 250))
提供便捷的列表管理功能:
# 全選
def on_check_all(self, event):
for i in range(self.file_checklist.GetCount()):
self.file_checklist.Check(i, True)
# 取消全選
def on_uncheck_all(self, event):
for i in range(self.file_checklist.GetCount()):
self.file_checklist.Check(i, False)
4. 文件壓縮實現(xiàn)
使用 Python 標準庫的 zipfile 模塊進行壓縮:
def on_zip_files(self, event):
# 獲取勾選的文件
checked_files = []
for i in range(self.file_checklist.GetCount()):
if self.file_checklist.IsChecked(i):
checked_files.append(self.file_list[i])
# 創(chuàng)建壓縮文件
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file_path in checked_files:
if os.path.exists(file_path):
arcname = os.path.basename(file_path)
zipf.write(file_path, arcname)
使用 ZIP_DEFLATED 參數(shù)啟用壓縮,可以有效減小文件大小。
5. 自動打開目標文件夾
這是一個提升用戶體驗的小細節(jié),不同操作系統(tǒng)需要使用不同的方法:
def open_folder(self, folder_path):
system = platform.system()
if system == 'Windows':
os.startfile(folder_path)
elif system == 'Darwin': # macOS
subprocess.Popen(['open', folder_path])
else: # Linux
subprocess.Popen(['xdg-open', folder_path])
技術亮點
1. 數(shù)據(jù)一致性維護
程序維護兩個數(shù)據(jù)結構:self.file_list(Python 列表)和 self.file_checklist(wxPython 控件)。在添加、刪除文件時,必須同步更新這兩個結構,確保數(shù)據(jù)一致性。
2. 重復文件檢查
在添加文件前檢查是否已存在,避免重復:
if path not in self.file_list:
self.file_list.append(path)
3. 智能文件名生成
使用時間戳生成默認壓縮文件名,避免文件覆蓋:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
default_name = f"archive_{timestamp}.zip"
4. 異常處理
在關鍵操作處添加 try-except 塊,提升程序健壯性:
try:
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
# 壓縮操作
except Exception as e:
wx.MessageBox(f'壓縮文件時出錯:{str(e)}', '錯誤', wx.OK | wx.ICON_ERROR)
使用示例
安裝依賴
pip install wxpython
運行程序
python file_zipper.py
操作流程
- 啟動程序后,可以看到清晰的界面布局
- 通過三種方式之一添加文件到列表
- 在列表中勾選需要壓縮的文件(默認全部勾選)
- 點擊"壓縮勾選的文件"按鈕
- 選擇壓縮文件的保存位置
- 等待壓縮完成,程序會自動打開目標文件夾
可能的擴展功能
這個基礎版本已經(jīng)能滿足日常需求,但還有許多可以改進的地方:
- 壓縮級別選擇:讓用戶選擇壓縮比例(速度 vs 大小)
- 進度條顯示:壓縮大文件時顯示進度
- 拖放支持:直接拖拽文件到窗口
- 文件預覽:顯示文件大小、類型等信息
- 批量操作:支持向上/向下移動文件順序
- 配置保存:記住用戶的常用設置
- 密碼保護:為壓縮文件添加密碼
- 多格式支持:支持 tar、7z 等其他壓縮格式
到此這篇關于Python使用wxPython打造文件批量壓縮工具的文章就介紹到這了,更多相關Python文件批量壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python通過兩個dataframe用for循環(huán)求笛卡爾積
這篇文章主要介紹了Python通過兩個dataframe用for循環(huán)求笛卡爾積,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
Keras設定GPU使用內(nèi)存大小方式(Tensorflow backend)
這篇文章主要介紹了Keras設定GPU使用內(nèi)存大小方式(Tensorflow backend),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python中翻譯功能translate模塊實現(xiàn)方法
在本篇文章中小編給各位整理了一篇關于python中翻譯功能translate模塊實現(xiàn)方法,有需要的朋友們可以參考下。2020-12-12

