7,使用使用 Python 3 和 tkinter 写一个批量修改文件名称的程序,两个文本框,两个按钮,点击第一个按钮导入文件路径,并把所有文件路径用表格的形式显示到第二个文本框中,每一页显示10个文件夹的路径,多余的存储大下一页第二个文本框最下面显示页码,并可以翻页,显示的路径可以直接在文本框中修改,修改完成后,再点击第二个按钮运行,这样就把文件夹里面的文件名称修改完成了,修改完成后,弹出一个修改完成对话框表示修改完成!
时间: 2023-09-28 15:13:39 浏览: 69
以下是一个简单的实现,代码中包含了注释,希望能够帮助你理解程序的实现过程。
```python
import os
import tkinter as tk
from tkinter import filedialog, messagebox
class BatchRenameApp:
def __init__(self, master):
self.master = master
self.master.title("Batch Rename App")
# 定义变量
self.file_list = []
self.current_page = 1
self.page_size = 10
# 定义界面元素
self.label1 = tk.Label(self.master, text="文件路径:")
self.label1.grid(row=0, column=0, padx=5, pady=5)
self.path_text = tk.Text(self.master, height=1)
self.path_text.grid(row=0, column=1, columnspan=2, padx=5, pady=5)
self.browse_button = tk.Button(self.master, text="浏览", command=self.browse_files)
self.browse_button.grid(row=0, column=3, padx=5, pady=5)
self.label2 = tk.Label(self.master, text="文件列表:")
self.label2.grid(row=1, column=0, padx=5, pady=5)
self.file_text = tk.Text(self.master, height=10)
self.file_text.grid(row=2, column=0, columnspan=4, padx=5, pady=5)
self.prev_button = tk.Button(self.master, text="上一页", command=self.prev_page)
self.prev_button.grid(row=3, column=0, padx=5, pady=5)
self.page_label = tk.Label(self.master, text="")
self.page_label.grid(row=3, column=1, padx=5, pady=5)
self.next_button = tk.Button(self.master, text="下一页", command=self.next_page)
self.next_button.grid(row=3, column=2, padx=5, pady=5)
self.label3 = tk.Label(self.master, text="修改后的文件名:")
self.label3.grid(row=4, column=0, padx=5, pady=5)
self.rename_text = tk.Text(self.master, height=1)
self.rename_text.grid(row=4, column=1, columnspan=2, padx=5, pady=5)
self.rename_button = tk.Button(self.master, text="修改", command=self.rename_files)
self.rename_button.grid(row=4, column=3, padx=5, pady=5)
def browse_files(self):
# 打开文件对话框
path = filedialog.askdirectory()
if path:
self.path_text.delete("1.0", tk.END)
self.path_text.insert(tk.END, path)
# 获取文件列表
self.file_list = os.listdir(path)
self.current_page = 1
self.show_files()
def show_files(self):
# 计算总页数
total_pages = (len(self.file_list) + self.page_size - 1) // self.page_size
# 显示当前页数和总页数
self.page_label.config(text="第{}页/共{}页".format(self.current_page, total_pages))
# 显示当前页的文件列表
start_index = (self.current_page - 1) * self.page_size
end_index = min(start_index + self.page_size, len(self.file_list))
files = self.file_list[start_index:end_index]
self.file_text.delete("1.0", tk.END)
for f in files:
self.file_text.insert(tk.END, f + "\n")
def prev_page(self):
if self.current_page > 1:
self.current_page -= 1
self.show_files()
def next_page(self):
total_pages = (len(self.file_list) + self.page_size - 1) // self.page_size
if self.current_page < total_pages:
self.current_page += 1
self.show_files()
def rename_files(self):
# 获取修改后的文件名
new_name = self.rename_text.get("1.0", tk.END).strip()
if not new_name:
messagebox.showinfo("提示", "请输入修改后的文件名!")
return
# 获取选择的文件
selected_files = self.file_text.tag_ranges("sel")
if not selected_files:
messagebox.showinfo("提示", "请先选择要修改的文件!")
return
# 修改文件名
path = self.path_text.get("1.0", tk.END).strip()
for i in range(0, len(selected_files), 2):
start = int(selected_files[i].split(".")[0])
end = int(selected_files[i+1].split(".")[0])
old_name = self.file_list[start-1]
new_name_with_ext = "{}{}".format(new_name, os.path.splitext(old_name)[1])
old_path = os.path.join(path, old_name)
new_path = os.path.join(path, new_name_with_ext)
os.rename(old_path, new_path)
self.file_list[start-1] = new_name_with_ext
# 更新文件列表
self.show_files()
# 弹出修改完成对话框
messagebox.showinfo("提示", "修改完成!")
if __name__ == "__main__":
root = tk.Tk()
app = BatchRenameApp(root)
root.mainloop()
```
该程序使用了 tkinter 库来创建 GUI 界面,实现了批量修改文件名的功能。运行程序后,用户可以通过浏览按钮选择要修改的文件所在的文件夹,然后程序会自动获取该文件夹中的所有文件,并将文件列表显示在文本框中。用户可以通过上一页和下一页按钮翻页查看文件列表,也可以直接在文本框中修改文件名,然后点击修改按钮进行批量修改。修改完成后,程序会弹出修改完成的对话框。
阅读全文