-
功能亮点:
-
支持文件夹和文件批量重命名
-
智能自然排序(数字顺序识别)
-
可视化预览,避免误操作
-
操作日志记录
-
-
使用场景:
-
整理照片/视频资源(如:
IMG_001 → 旅行日记_001
) -
管理文档(如:
报告_初稿.docx → 终稿_XXX项目报告.docx
-
界面图
部分代码
def create_widgets(self):
# 主框架布局
main_frame = tk.Frame(self.root)
main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
# 目录选择部分
dir_frame = tk.Frame(main_frame)
dir_frame.pack(fill=tk.X, pady=5)
tk.Label(dir_frame, text="目标目录:").pack(side=tk.LEFT)
tk.Entry(dir_frame, textvariable=self.directory, width=60).pack(side=tk.LEFT, padx=5)
tk.Button(dir_frame, text="浏览...", command=self.browse_directory).pack(side=tk.LEFT)
# 项目列表和操作区域
list_frame = tk.Frame(main_frame)
list_frame.pack(fill=tk.BOTH, expand=True)
# 原始项目列表(使用Treeview显示更丰富的信息)
tk.Label(list_frame, text="原始文件列表(按照名称升序排列)").grid(row=0, column=0, sticky="w")
self.tree_frame = tk.Frame(list_frame)
self.tree_frame.grid(row=1, column=0, sticky="nsew", padx=5, pady=5)
# 使用Treeview显示文件信息
self.tree = Treeview(
self.tree_frame,
columns=("type", "path"),
show="headings",
height=15,
selectmode="extended" # 允许多选
)
# 设置列标题
self.tree.heading("#0", text="名称")
self.tree.heading("type", text="类型")
self.tree.heading("path", text="路径")
# 设置列宽
self.tree.column("#0", width=200)
self.tree.column("type", width=100)
self.tree.column("path", width=400)
# 添加滚动条
vsb = Scrollbar(self.tree_frame, orient="vertical", command=self.tree.yview)
hsb = Scrollbar(self.tree_frame, orient="horizontal", command=self.tree.xview)
self.tree.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)
self.tree.grid(row=0, column=0, sticky="nsew")
vsb.grid(row=0, column=1, sticky="ns")
hsb.grid(row=1, column=0, sticky="ew")
# 新名称输入区域
tk.Label(list_frame, text="新名称列表(不要加后缀名)").grid(row=0, column=1, sticky="w")
self.new_names_text = scrolledtext.ScrolledText(list_frame, height=15, width=30)
self.new_names_text.grid(row=1, column=1, sticky="nsew", padx=5, pady=5)
# 预览区域
tk.Label(list_frame, text="重命名预览").grid(row=0, column=2, sticky="w")
self.preview_tree = Treeview(list_frame, columns=("new_name",), show="headings", height=15)
self.preview_tree.heading("#0", text="原始名称")
self.preview_tree.heading("new_name", text="新名称")
self.preview_tree.grid(row=1, column=2, sticky="nsew", padx=5, pady=5)
# 按钮部分
button_frame = tk.Frame(main_frame)
button_frame.pack(pady=10)
tk.Button(button_frame, text="加载文件", command=self.load_items).pack(side=tk.LEFT, padx=5)
tk.Button(button_frame, text="生成预览", command=self.generate_preview).pack(side=tk.LEFT, padx=5)
tk.Button(button_frame, text="执行重命名", command=self.execute_rename).pack(side=tk.LEFT, padx=5)
# 日志输出
tk.Label(main_frame, text="操作日志").pack(anchor="w")
self.log_text = scrolledtext.ScrolledText(main_frame, height=10)
self.log_text.pack(fill=tk.BOTH, expand=True)
# 配置网格权重
list_frame.grid_columnconfigure(0, weight=3)
list_frame.grid_columnconfigure(1, weight=1)
list_frame.grid_columnconfigure(2, weight=3)
list_frame.grid_rowconfigure(1, weight=1)
self.tree_frame.grid_rowconfigure(0, weight=1)
self.tree_frame.grid_columnconfigure(0, weight=1)
def browse_directory(self):
dir_path = filedialog.askdirectory()
if dir_path:
self.directory.set(dir_path)
self.load_items()