使用 Python 3 和 tkinter 写一个批量修改文件名称的程序,两个文本框,两个按钮,点击第一个按钮导入文件路径,并把该文件夹下所有的文件全路径用表格的形式显示到第二个文本框中,并可以直接在文本框中修改文件名称,修改完成后,点击第二个按钮就可以把该文件夹下的文件名称修改了,每一页显示10个文件夹的路径,多余的存储大下一页,第二个文本框最下面显示页码,并可以翻页。
时间: 2023-09-29 17:05:15 浏览: 82
以下是符合您要求的 Python 3 和 tkinter 代码:
```python
import os
import tkinter as tk
from tkinter import messagebox, filedialog
class BatchRenameFiles(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.file_list = []
self.current_page = 1
self.create_widgets()
def create_widgets(self):
# 第一个文本框
self.input_path = tk.Entry(self.master, width=50)
self.input_path.grid(row=0, column=0, padx=5, pady=5, sticky='w')
self.input_path.insert(0, '请输入文件夹路径...')
# 第一个按钮
self.select_btn = tk.Button(self.master, text='选择文件夹', command=self.select_folder)
self.select_btn.grid(row=0, column=1, padx=5, pady=5, sticky='w')
# 第二个文本框
self.file_list_box = tk.Text(self.master, width=70, height=20)
self.file_list_box.grid(row=1, column=0, columnspan=2, padx=5, pady=5)
# 第二个按钮
self.rename_btn = tk.Button(self.master, text='批量重命名', command=self.rename_files)
self.rename_btn.grid(row=2, column=0, padx=5, pady=5, sticky='w')
# 翻页按钮
self.prev_page_btn = tk.Button(self.master, text='上一页', command=self.prev_page)
self.prev_page_btn.grid(row=3, column=0, padx=5, pady=5, sticky='w')
self.next_page_btn = tk.Button(self.master, text='下一页', command=self.next_page)
self.next_page_btn.grid(row=3, column=1, padx=5, pady=5, sticky='e')
# 页码标签
self.page_label = tk.Label(self.master, text='第1页')
self.page_label.grid(row=4, column=0, columnspan=2, padx=5, pady=5)
def select_folder(self):
folder_path = filedialog.askdirectory() # 选择文件夹路径
if folder_path:
self.input_path.delete(0, 'end')
self.input_path.insert(0, folder_path)
self.show_file_list()
def show_file_list(self):
folder_path = self.input_path.get()
if os.path.isdir(folder_path):
self.file_list = os.listdir(folder_path)
self.file_list_box.delete('1.0', 'end')
start_index = (self.current_page - 1) * 10
end_index = self.current_page * 10
for i, file_name in enumerate(self.file_list[start_index:end_index]):
self.file_list_box.insert('end', f'{i+1+start_index}. {file_name}\n')
else:
messagebox.showerror('错误', '文件夹路径无效!')
def rename_files(self):
folder_path = self.input_path.get()
if os.path.isdir(folder_path):
start_index = (self.current_page - 1) * 10
end_index = self.current_page * 10
for i, file_name in enumerate(self.file_list[start_index:end_index]):
old_path = os.path.join(folder_path, file_name)
new_name = self.file_list_box.get(f'{i+1+start_index}.0', f'{i+1+start_index}.end').strip()
if new_name:
new_path = os.path.join(folder_path, new_name)
os.rename(old_path, new_path)
self.show_file_list()
else:
messagebox.showerror('错误', '文件夹路径无效!')
def prev_page(self):
if self.current_page > 1:
self.current_page -= 1
self.page_label.config(text=f'第{self.current_page}页')
self.show_file_list()
def next_page(self):
if self.current_page < (len(self.file_list) - 1) // 10 + 1:
self.current_page += 1
self.page_label.config(text=f'第{self.current_page}页')
self.show_file_list()
if __name__ == '__main__':
root = tk.Tk()
root.title('批量修改文件名称')
app = BatchRenameFiles(root)
app.mainloop()
```
说明:
1. 代码中使用了 `tkinter` 库来创建 GUI 界面。
2. `BatchRenameFiles` 类继承自 `tk.Frame`,表示一个框架。
3. `create_widgets` 方法用于创建界面的所有组件,包括两个文本框、两个按钮、翻页按钮和页码标签。
4. `select_folder` 方法用于选择文件夹路径,并将其显示到第一个文本框中。
5. `show_file_list` 方法用于显示文件列表,将该文件夹下所有文件的全路径以表格形式显示到第二个文本框中,同时支持翻页功能。
6. `rename_files` 方法用于批量重命名文件,读取第二个文本框中的新名称并对应修改文件名称。
7. `prev_page` 和 `next_page` 方法用于实现翻页功能。
8. `if __name__ == '__main__'` 语句用于检测该模块是否被作为主程序运行,如果是,则创建一个 `Tk` 对象,并构建 `BatchRenameFiles` 对象,进入主事件循环中等待事件的发生。
阅读全文