Python wxPython創(chuàng)建文件復制工具
在 wxPython 中實現(xiàn)文件復制工具:如何通過 GUI 選擇源文件夾與目標文件夾
wxPython 是一個功能強大的 GUI 框架,它允許開發(fā)者通過 Python 輕松構建跨平臺的桌面應用。在這篇博客中,我將展示如何利用 wxPython 創(chuàng)建一個文件復制工具,使得用戶能夠選擇源文件夾和目標文件夾,并將源文件夾中的文件復制到目標文件夾下一個以當前日期命名的子文件夾中。
目標功能
選擇源文件夾:用戶能夠選擇一個源文件夾,程序將從中獲取文件。
選擇目標文件夾:用戶能夠選擇目標文件夾,程序將在該文件夾中創(chuàng)建一個以當前日期命名的子文件夾。
文件復制:將源文件夾中的所有文件復制到目標文件夾中的子文件夾。
前提準備
在開始之前,請確保已經(jīng)安裝了 wxPython 和 shutil 模塊。
你可以通過以下命令安裝 wxPython:
pip install wxPython
shutil 是 Python 的標準庫之一,用于處理文件和目錄,因此無需單獨安裝。
實現(xiàn)步驟
1. 創(chuàng)建主窗口
首先,我們需要創(chuàng)建一個簡單的 GUI 窗口,在其中添加按鈕和文本框,允許用戶選擇源文件夾和目標文件夾。
import wx import os import shutil from datetime import datetime # 創(chuàng)建主窗口類 class FileCopyApp(wx.Frame): def __init__(self, *args, **kw): super(FileCopyApp, self).__init__(*args, **kw) self.InitUI() def InitUI(self): # 設置窗口 self.SetTitle('文件復制工具') self.SetSize(400, 250) panel = wx.Panel(self) # 創(chuàng)建控件 vbox = wx.BoxSizer(wx.VERTICAL) # 源文件夾選擇按鈕 self.src_folder_button = wx.Button(panel, label="選擇源文件夾") self.src_folder_button.Bind(wx.EVT_BUTTON, self.onSelectSourceFolder) vbox.Add(self.src_folder_button, flag=wx.EXPAND | wx.ALL, border=10) # 顯示源文件夾路徑 self.src_folder_text = wx.TextCtrl(panel, style=wx.TE_READONLY) vbox.Add(self.src_folder_text, flag=wx.EXPAND | wx.ALL, border=10) # 目標文件夾選擇按鈕 self.dst_folder_button = wx.Button(panel, label="選擇目標文件夾") self.dst_folder_button.Bind(wx.EVT_BUTTON, self.onSelectDestinationFolder) vbox.Add(self.dst_folder_button, flag=wx.EXPAND | wx.ALL, border=10) # 顯示目標文件夾路徑 self.dst_folder_text = wx.TextCtrl(panel, style=wx.TE_READONLY) vbox.Add(self.dst_folder_text, flag=wx.EXPAND | wx.ALL, border=10) # 復制按鈕 self.copy_button = wx.Button(panel, label="復制文件") self.copy_button.Bind(wx.EVT_BUTTON, self.onCopyFiles) vbox.Add(self.copy_button, flag=wx.EXPAND | wx.ALL, border=10) panel.SetSizer(vbox) def onSelectSourceFolder(self, event): # 彈出文件夾選擇對話框 dlg = wx.DirDialog(self, "選擇源文件夾", style=wx.DD_DEFAULT_STYLE) if dlg.ShowModal() == wx.ID_OK: self.src_folder_text.SetValue(dlg.GetPath()) dlg.Destroy() def onSelectDestinationFolder(self, event): # 彈出文件夾選擇對話框 dlg = wx.DirDialog(self, "選擇目標文件夾", style=wx.DD_DEFAULT_STYLE) if dlg.ShowModal() == wx.ID_OK: self.dst_folder_text.SetValue(dlg.GetPath()) dlg.Destroy() def onCopyFiles(self, event): src_folder = self.src_folder_text.GetValue() dst_folder = self.dst_folder_text.GetValue() if not src_folder or not dst_folder: wx.MessageBox("請先選擇源文件夾和目標文件夾", "錯誤", wx.ICON_ERROR) return # 創(chuàng)建目標文件夾中以當前日期命名的子文件夾 (格式:yyyymmdd) today = datetime.today().strftime('%Y%m%d') date_folder = os.path.join(dst_folder, today) if not os.path.exists(date_folder): os.makedirs(date_folder) # 遍歷源文件夾中的所有文件,復制到目標文件夾中的日期子文件夾 for filename in os.listdir(src_folder): src_file = os.path.join(src_folder, filename) dst_file = os.path.join(date_folder, filename) if os.path.isfile(src_file): shutil.copy(src_file, dst_file) wx.MessageBox("文件復制完成", "成功", wx.ICON_INFORMATION) # 運行應用程序 def main(): app = wx.App(False) frame = FileCopyApp(None, title='文件復制工具') frame.Show() app.MainLoop() if __name__ == '__main__': main()
2. 功能解釋
主窗口:創(chuàng)建了一個包含兩個按鈕(選擇源文件夾和目標文件夾)以及對應的文本框來顯示文件夾路徑的窗口。
選擇源文件夾:使用 wx.DirDialog 彈出文件夾選擇對話框,讓用戶選擇源文件夾路徑。
選擇目標文件夾:同樣地,使用 wx.DirDialog 讓用戶選擇目標文件夾路徑。
文件復制:當用戶點擊“復制文件”按鈕時,程序會獲取源文件夾和目標文件夾路徑,然后在目標文件夾中以當前日期(yyyymmdd)為名稱創(chuàng)建一個子文件夾,并將源文件夾中的所有文件復制到該子文件夾中。
3. 運行和使用
啟動程序后,您會看到一個簡單的 GUI 窗口。
點擊 “選擇源文件夾” 按鈕,選擇需要復制文件的源文件夾。
點擊 “選擇目標文件夾” 按鈕,選擇要將文件復制到的目標文件夾。
點擊 “復制文件” 按鈕,程序會自動將源文件夾中的所有文件復制到目標文件夾中,以當前日期為名稱創(chuàng)建一個子文件夾。
4. 異常處理
我們添加了錯誤檢查機制,確保:
- 用戶沒有選擇文件夾時,程序會彈出錯誤提示。
- 目標文件夾不存在時,程序會自動創(chuàng)建一個新的日期文件夾。
效果圖
到此這篇關于Python wxPython創(chuàng)建文件復制工具的文章就介紹到這了,更多相關Python文件復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python調用xlsxwriter創(chuàng)建xlsx的方法
今天小編就為大家分享一篇python調用xlsxwriter創(chuàng)建xlsx的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例
這篇文章主要介紹了使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11使用torchtext導入NLP數(shù)據(jù)集的操作
這篇文章主要介紹了使用torchtext導入NLP數(shù)據(jù)集的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05