import tkinter as tk
from tkinter import filedialog, messagebox, ttk, scrolledtext
class NovelMergerApp:
def __init__(self, root):
self.root = root
self.root.title("小说文本合并器")
self.root.geometry("600x400") # 设置窗口的初始宽高
self.root.resizable(false, false) # 紧止窗口改变大小
self.setup_widgets()
def setup_widgets(self):
self.frame = tk.Frame(self.root)
self.frame.pack(padx=20, pady=20, fill=tk.X)
self.btn_open_files = tk.Button(self.frame, text="选择TXT文件", command=self.open_files)
self.btn_open_files.pack(side=tk.LEFT)
self.btn_merge = tk.Button(self.frame, text="合并文件", command=self.merge_files)
self.btn_merge.pack(side=tk.LEFT, padx=(20, 0))
self.progress_bar = ttk.Progressbar(self.root, orient=tk.HORIZONTAL, length=400, mode="determinate")
self.progress_bar.pack(pady=30)
self.label_status = tk.Label(self.root, text="等待操作...", width=50, height=2)
self.label_status.pack()
self.listbox_files = scrolledtext.ScrolledText(self.root, width=70, height=15, state='disabled')
self.listbox_files.pack(pady=20, expand=True, fill=tk.BOTH)
self.files = []
def open_files(self):
self.files = filedialog.askopenfilenames(title="选择TXT文件", filetypes=[("TXT files", "*.txt")])
if self.files:
self.listbox_files.config(state='normal')
self.listbox_files.delete(1.0, tk.END)
for file in self.files:
self.listbox_files.insert(tk.END, file + "\n")
self.listbox_files.config(state='disabled')
self.label_status.config(text=f"已选择 {len(self.files)} 个文件")
else:
self.label_status.config(text="未选择任何文件")
def merge_files(self):
if not self.files:
messagebox.showwarning("警告", "请先选择文件!")
return
output_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("TXT files", "*.txt")])
if not output_path:
return
self.progress_bar['maximum'] = len(self.files)
self.progress_bar['value'] = 0
self.label_status.config(text="正在合并文件...")
with open(output_path, 'w', encoding='utf-8') as outfile:
for idx, filepath in enumerate(self.files):
with open(filepath, 'r', encoding='utf-8') as infile:
outfile.write(infile.read())
outfile.write("\n") # 添加换行符分隔文件内容
self.progress_bar['value'] += 1
self.root.update_idletasks()
self.progress_bar['value'] = 0
self.label_status.config(text=f"文件已合并至: {output_path}")
messagebox.showinfo("完成", f"已成功合并 {len(self.files)} 个文件!")
def main():
root = tk.Tk()
app = NovelMergerApp(root)
root.mainloop()
if __name__ == "__main__":
main()
07-09
222
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-02
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交