比如浏览文件夹、导出文件列表、整理特定类型的文件以及比对文本文件内容。本文将详细分析一个基于wxPython开发的文件管理工具,该工具提供了多种实用功能,代码结构清晰,易于理解和扩展。通过学习这个示例,你将掌握如何使用wxPython构建图形界面应用程序和实现常见的文件操作。
C:\pythoncode\new\shortcutfilemove.py
全部代码
import wx
import os
import shutil
import datetime
import difflib
class FileManagerFrame(wx.Frame):
def __init__(self, parent, title):
super(FileManagerFrame, self).__init__(parent, title=title, size=(800, 600))
# 创建面板和工具栏
self.panel = wx.Panel(self)
self.toolbar = self.CreateToolBar()
# 添加工具栏按钮
browse_tool = self.toolbar.AddTool(wx.ID_ANY, "浏览", wx.ArtProvider.GetBitmap(wx.ART_FOLDER_OPEN), "浏览文件夹")
export_tool = self.toolbar.AddTool(wx.ID_ANY, "导出", wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE), "导出结果")
organize_tool = self.toolbar.AddTool(wx.ID_ANY, "整理", wx.ArtProvider.GetBitmap(wx.ART_REDO), "整理快捷方式")
compare_tool = self.toolbar.AddTool(wx.ID_ANY, "比对", wx.ArtProvider.GetBitmap(wx.ART_LIST_VIEW), "比对TXT文件")
# 实现工具栏
self.toolbar.Realize()
# 绑定工具栏事件
self.Bind(wx.EVT_TOOL, self.OnBrowse, browse_tool)
self.Bind(wx.EVT_TOOL, self.OnExport, export_tool)
self.Bind(wx.EVT_TOOL, self.OnOrganize, organize_tool)
self.Bind(wx.EVT_TOOL, self.OnCompare, compare_tool)
# 创建状态栏
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText("准备就绪")
# 创建主布局
main_sizer = wx.BoxSizer(wx.VERTICAL)
# 显示当前路径的文本框
self.path_text = wx.TextCtrl(self.panel, style=wx.TE_READONLY)
main_sizer.Add(self.path_text, 0, wx.EXPAND | wx.ALL, 5)
# 创建列表框用于显示文件
self.listbox = wx.ListBox(self.panel, style=wx.LB_SINGLE)
main_sizer.Add(self.listbox, 1, wx.EXPAND | wx.ALL, 5)
# 设置布局
self.panel.SetSizerAndFit(main_sizer)
# 当前选择的目录
self.current_directory = ""
# 文件列表
self.file_list = []
# 居中显示窗口
self.Center()
self.Show()
def OnBrowse(self, event):
"""浏览按钮处理函数"""
# 打开目录选择对话框
dlg = wx.DirDialog(self, "选择要浏览的文件夹", style=wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
self.current_directory = dlg.GetPath()
self.path_text.SetValue(self.current_directory)
# 清空列表
self.listbox.Clear()
self.file_list = []
# 开始遍历文件夹
self.statusbar.SetStatusText("正在扫描文件夹...")
self.TraverseDirectory(self.current_directory)
self.statusbar.SetStatusText(f"扫描完成,共找到 {
len(self.file_list)} 个文件")
dlg.Destroy()
def TraverseDirectory(self, directory):
"""遍历目录,获取所有文件"""
try:
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
rel_path = os.path.relpath(file_path, self.current_directory)
self.file_list.append(file_path)
self.listbox.Append(rel_path)
except Exception as e:
wx.MessageBox(f"遍历目录时发生错误: {
str(e)}", "错误", wx.OK | wx.ICON_ERROR)
def OnExport(self, event):
"""导出按钮处理函数"""
if not self.file_list:
wx.MessageBox("没有可导出的内容,请先浏览文件夹", "提示", wx.OK | wx.ICON_INFORMATION)
return
# 打开保存文件对话框
current_time = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
default_filename = f"文件列表_{
current_time}.txt"
dlg = wx.FileDialog(
self, "导出文件列表", wildcard="文本文件 (*.txt)|*.txt",
style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT,
defaultFile=default_filename
)
if dlg.ShowModal() == wx.ID_OK:
save_path = dlg.GetPath()
try:
with open(save_path, 'w', encoding='utf-8') as f:
f.write(f"文件列表 - {
self.current_directory}\n")
f.write(f"导出时间: {
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write("-" * 50 + "\n\n")
for file_path in self.file_list:
f.write(f"{
file_path}\n")
self.statusbar.SetStatusText(f"成功导出到 {
save_path}")
wx.MessageBox(f"已成功导出文件列表到:\n{
save_path}", "导出成功", wx.OK | wx.ICON_INFORMATION)
except Exception as