import os import tkinter as tk from tkinter import filedialog, messagebox, font def count_lines_and_comments(directory, text_widget): total_code_lines = 0 total_comment_lines = 0 for root, dirs, files in os.walk(directory): for file in files: if file.endswith('.py'): file_path = os.path.join(root, file) code_lines = 0 comment_lines = 0 with open(file_path, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() if not stripped_line: # Skip empty lines continue if stripped_line.startswith('#'): comment_lines += 1 else: code_lines += 1 total_code_lines += code_lines total_comment_lines += comment_lines text_widget.insert(tk.END, f"{file_path} - 代码行数: {code_lines}, 注释行数: {comment_lines}\n") text_widget.insert(tk.END, f"\n'{directory}': 总代码行数: {total_code_lines}, 总注释行数: {total_comment_lines}\n") def browse_folder(): folder_path = filedialog.askdirectory() entry_path.delete(0, tk.END) entry_path.insert(0, folder_path) def on_calculate(): directory = entry_path.get() if not directory: directory = 'E:\\Self-Tool-Code\\Pybot' if not os.path.exists(directory): messagebox.showerror("错误", "指定的目录不存在") return text_output.delete(1.0, tk.END) # 清空文本框 count_lines_and_comments(directory, text_output) # 创建主窗口 root = tk.Tk() root.title("代码行数统计工具") # 设置字体为宋体 custom_font = font.Font(family="宋体", size=12) # 创建路径输入框和标签 label_path = tk.Label(root, text="路径:", font=custom_font) label_path.grid(row=0, column=0, padx=10, pady=10) entry_path = tk.Entry(root, width=50, font=custom_font) entry_path.grid(row=0, column=1, padx=10, pady=10) entry_path.insert(0, "E:\\Self-Tool-Code\\Pybot") # 创建浏览文件夹按钮 button_browse = tk.Button(root, text="浏览", command=browse_folder, font=custom_font) button_browse.grid(row=0, column=2, padx=10, pady=10) # 创建按钮 calculate_button = tk.Button(root, text="计算", command=on_calculate, font=custom_font) calculate_button.grid(row=1, column=0, columnspan=3, pady=10) # 创建文本框用于显示输出 text_output = tk.Text(root, width=80, height=20, font=custom_font) text_output.grid(row=2, column=0, columnspan=3, padx=10, pady=10) # 运行主循环 root.mainloop()