在当今的软件开发世界中,管理大量的源代码文件变得越来越重要。无论是个人项目还是大型团队协作,有一个强大而灵活的文件管理工具都可以大大提高工作效率。今天,我们要介绍一个基于Python和wxPython构建的文件管理器,它专门用于管理.py文件。
C:\pythoncode\new\managefiles.py
全部代码
import wx
import wx.lib.mixins.listctrl as listmix
import sqlite3
import os
import subprocess
from datetime import datetime
import openpyxl
class EditableListCtrl(wx.ListCtrl, listmix.TextEditMixin):
def __init__(self, parent, style):
wx.ListCtrl.__init__(self, parent, style=style)
listmix.TextEditMixin.__init__(self)
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title="Manage .py Files", size=(1000, 600))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
# Folder selection and scan button
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
self.folder_picker = wx.DirPickerCtrl(panel)
scan_btn = wx.Button(panel, label="Scan")
scan_btn.Bind(wx.EVT_BUTTON, self.on_scan)
hbox1.Add(self.folder_picker, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
hbox1.Add(scan_btn, flag=wx.ALL, border=5)
# ListView1 for displaying .py files
self.listview1 = wx.ListCtrl(panel, style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
self.listview1.InsertColumn(0, "File Name", width=200)
self.listview1.InsertColumn(1, "Full Path", width=400)
self.listview1.InsertColumn(2, "Date Modified", width=200)
self.listview1.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_listview1_double_click)
# Search box for ListView1
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
self.search1 = wx.TextCtrl(panel)
search1_btn = wx.Button(panel, label="Search ListView1")
search1_btn.Bind(wx.EVT_BUTTON, self.on_search1)
hbox2.Add(self.search1, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
hbox2.Add(search1_btn, flag=wx.ALL, border=5)
# ListView2 for selected files with editable remarks and valid checkbox
self.listview2 = wx.ListCtrl(panel, style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
self.listview2.InsertColumn(0, "File Name", width=200)
self.listview2.InsertColumn(1, "Full Path", width=400)
self.listview2.InsertColumn(2, "Date Modified", width=200)
self.listview2.InsertColumn(3, "Remarks", width=150)
self.listview2.InsertColumn(4, "Valid", width=50)
self.listview2.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_listview2_double_click)
# Search box for ListView2
hbox3 = wx.BoxSizer(wx.HORIZONTAL)
self.search2 = wx.TextCtrl(panel)
search2_btn = wx.Button(panel, label="Search ListView2")
search2_btn.Bind(wx.EVT_BUTTON, self.on_search2)
hbox3.Add(self.search2, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
hbox3.Add(search2_btn, flag=wx.ALL, border=5)
# Buttons for opening, saving, and deleting
hbox4 = wx.BoxSizer(wx.HORIZONTAL)
open_btn = wx.Button(panel, label="Open in VSCode")
open_btn.Bind(wx.EVT_BUTTON, self.on_open)
save_btn = wx.Button(panel, label="Save to Database")
save_btn.Bind(wx.EVT_BUTTON, self.save_to_database)
delete_btn = wx.Button(panel, label="Delete Selected")
delete_btn.Bind(wx.EVT_BUTTON, self.on_delete)
hbox4.Add(open_btn, flag=wx.ALL, border=5)
hbox4.Add(save_btn, flag=wx.ALL, border=5)
hbox4.Add(delete_btn, flag=wx.ALL, border=5)
# ListView3 for displaying database records
self.listview3 = wx.ListCtrl(panel, style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
self.listview3.InsertColumn(0, "File Name", width=200)
self.listview3.InsertColumn(1, "Full Path", width=400)
self.listview3.InsertColumn(2, "Date Modified", width=200)
self.listview3.InsertColumn(3, "Remarks", width=150)
self.listview3.InsertColumn(4, "Valid", width=50)
# Buttons for refreshing and deleting database records, opening in VSCode, and exporting to Excel
hbox5 = wx.BoxSizer(wx.HORIZONTAL)
refresh_btn = wx.Button(panel, label="Refresh Database Records")
refresh_btn.Bind(wx.EVT_BUTTON, self.on_refresh)
delete_db_btn = wx.Button(panel, label="Delete Database Record")
delete_db_btn.Bind(wx.EVT_BUTTON, self.on_delete_db)
open_vscode_btn = wx.Button(panel, label="Open in VSCode")
open_vscode_btn.Bind(wx.EVT_BUTTON, self.on_open_vscode)
export_excel_btn = wx.Button(panel, label="Export to Excel")
export_excel_btn.Bind(wx.EVT_BUTTON, self.on_export_excel)
hbox5.Add(refresh_btn, flag=wx.ALL, border