From ee2bd2c77b4151e30851fe784382b56a6223d5da Mon Sep 17 00:00:00 2001 From: CookSleep <151028412+CookSleep@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:10:33 +0800 Subject: [PATCH] Add files via upload --- README.md | 14 +- ...3\347\247\215\345\260\272\345\257\270.ico" | Bin 0 -> 284334 bytes icon.svg | 16 ++ main.py | 174 ++++++++++++++++++ project_exporter.spec | 48 +++++ 5 files changed, 245 insertions(+), 7 deletions(-) create mode 100644 "icon-3\347\247\215\345\260\272\345\257\270.ico" create mode 100644 icon.svg create mode 100644 main.py create mode 100644 project_exporter.spec diff --git a/README.md b/README.md index cf3e2c3..86f3cf9 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,18 @@ ## 简介 -这是一个使用PyQt5开发的项目文件导出工具。它允许用户通过拖拽项目文件夹到工具窗口中,自动生成项目的文件结构和代码内容的文本文件。该工具旨在方便开发者直接通过上下文向LLM传递项目详细信息。 +这是一个使用PyQt5开发的项目文件导出工具。它允许用户通过拖拽或选择文件夹的方式将项目文件夹到工具窗口中,然后自动生成项目的文件结构和具体内容(可选)的文本文件。 -本项目的代码几乎完全由GPT-4o编写,我仅提供需求和建议。 +该工具旨在方便开发者直接通过上下文向LLM传递项目的详细信息。 + +本项目的代码几乎完全由GPT-4o、Claude3.5 Sonnet编写,我仅提供需求和建议。 ## 功能特点 - 自动生成项目的文件结构树 -- 提取每个文件的代码内容并写入输出文件 +- 提取每个文件的代码内容并写入输出文件(可选) - 使用XML标签包裹文件内容,便于LLM更好地读取文件 - 将导出的文本文件放置在导入的项目文件目录中 -- 使用HarmonyOS Sans SC Regular字体,界面美观 - 实时显示导出状态和输出文件路径 ## 使用方法 @@ -21,10 +22,9 @@ 2. 下载最新版本的 `Project_Exporter.zip`。 3. 解压 `Project_Exporter.zip`。 4. 双击运行 `项目文件导出工具.exe`。 -5. 将需要导入的项目文件夹拖入程序窗口。 -6. 在输出完成后,前往刚刚导入的项目目录(在输出框也有显示)查找输出文件。 +5. 将需要导入的项目文件夹拖入程序窗口/点击“选择文件夹”选择需要导出的文件夹。 +6. 在输出完成后,前往刚刚选择的项目目录(在输出框也有显示)查找输出文件。 7. 复制粘贴全文到LLM的上下文窗口中,继续你和LLM的项目研究之旅。 -8. 如果您在Mac电脑上运行本程序显示“无法打开 “ProjectExportTool”,因为Apple无法检查其是否包含恶意软件”,请在终端中输入以下命令:“sudo spctl --master-disable”,然后回车输入密码,再重新运行本程序即可。 ## 贡献 diff --git "a/icon-3\347\247\215\345\260\272\345\257\270.ico" "b/icon-3\347\247\215\345\260\272\345\257\270.ico" new file mode 100644 index 0000000000000000000000000000000000000000..9e722a37cc3e581db4681b005a151ffd7156587d GIT binary patch literal 284334 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.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

vtfyQSgbdtBbF5xFre}& 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 f9D5x+!(-X%bJe*GZ?&BTSx5>y++6i-L*4&B5 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..c181fe1 --- /dev/null +++ b/main.py @@ -0,0 +1,174 @@ +import sys +import os +from PyQt5.QtWidgets import ( + QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, + QLabel, QLineEdit, QCheckBox, QPushButton, QFileDialog +) +from PyQt5.QtGui import QFontDatabase, QFont, QIcon +from PyQt5.QtCore import Qt + +class ProjectExportTool(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("项目文件导出工具") + self.setGeometry(100, 100, 500, 400) # 调整窗口大小 + self.initUI() + + def initUI(self): + self.central_widget = QWidget() + self.setCentralWidget(self.central_widget) + self.layout = QVBoxLayout(self.central_widget) + + # 加载图标 + icon_path = os.path.join(os.path.dirname(__file__), 'icon-3种尺寸.ico') + if os.path.exists(icon_path): + self.setWindowIcon(QIcon(icon_path)) + else: + print("图标文件未找到") + + # 加载并设置字体 + font_path = os.path.join(os.path.dirname(__file__), 'HarmonyOS_Sans_SC_Regular.ttf') + font_id = QFontDatabase.addApplicationFont(font_path) + if font_id != -1: + font_family = QFontDatabase.applicationFontFamilies(font_id)[0] + font = QFont(font_family, 12) # 增加基础字体大小 + self.setFont(font) + else: + print("字体加载失败,使用系统默认字体") + + # 创建标题 + title_label = QLabel("项目文件导出工具", self) + title_label.setAlignment(Qt.AlignCenter) + title_label.setStyleSheet("font-size: 24px; font-weight: bold; margin: 15px 0;") + self.layout.addWidget(title_label) + + # 创建拖拽框 + self.drag_label = QLabel("拖入项目文件夹", self) + self.drag_label.setAlignment(Qt.AlignCenter) + self.drag_label.setStyleSheet(""" + QLabel { + border: 2px dashed #aaa; + border-radius: 5px; + padding: 30px; + background-color: #f8f8f8; + color: #555; + font-size: 16px; + } + """) + self.drag_label.setMinimumHeight(120) + self.layout.addWidget(self.drag_label) + + # 创建选择文件夹按钮 + self.select_button = QPushButton("选择文件夹", self) + self.select_button.setStyleSheet(""" + QPushButton { + background-color: #4CAF50; + color: white; + padding: 10px; + border: none; + border-radius: 4px; + font-size: 16px; + } + QPushButton:hover { + background-color: #45a049; + } + """) + self.select_button.clicked.connect(self.select_folder) + self.layout.addWidget(self.select_button) + + # 创建复选框 + self.export_tree_only_checkbox = QCheckBox("只导出文件结构", self) + self.export_tree_only_checkbox.setStyleSheet("font-size: 14px; margin-top: 10px;") + self.layout.addWidget(self.export_tree_only_checkbox) + + # 创建状态编辑框 + self.status_edit = QLineEdit(self) + self.status_edit.setReadOnly(True) + self.status_edit.setPlaceholderText('输出状态将显示在这里') + self.status_edit.setStyleSheet(""" + QLineEdit { + padding: 10px; + border: 1px solid #ccc; + border-radius: 4px; + background-color: #f9f9f9; + font-size: 14px; + } + """) + self.layout.addWidget(self.status_edit) + + self.central_widget.setLayout(self.layout) + self.setAcceptDrops(True) + + def select_folder(self): + dir_path = QFileDialog.getExistingDirectory(self, "选择项目文件夹") + if dir_path: + self.process_folder(dir_path) + + def dragEnterEvent(self, event): + if event.mimeData().hasUrls(): + event.acceptProposedAction() + + def dropEvent(self, event): + urls = event.mimeData().urls() + if urls: + dir_path = urls[0].toLocalFile() + self.process_folder(dir_path) + + def process_folder(self, dir_path): + if os.path.isdir(dir_path): + self.status_edit.clear() + project_name = os.path.basename(dir_path) + if self.export_tree_only_checkbox.isChecked(): + output_file = os.path.join(dir_path, f'{project_name}_文件结构.txt') + else: + output_file = os.path.join(dir_path, f'{project_name}_文结构和内容.txt') + self.generate_file_structure(dir_path, output_file) + self.status_edit.setText(f'导出完成:{output_file}') + + def generate_file_structure(self, root_dir, output_file): + with open(output_file, 'w', encoding='utf-8') as f: + f.write(self.get_directory_tree(root_dir, output_file)) + if not self.export_tree_only_checkbox.isChecked(): + for dirpath, _, filenames in os.walk(root_dir): + for filename in filenames: + filepath = os.path.join(dirpath, filename) + if filepath == output_file: + continue + normalized_path = os.path.normpath(filepath).replace('\\', '/') + f.write(f"\n\n") + try: + with open(filepath, 'r', encoding='utf-8') as file: + content = file.read() + f.write(content + "\n") + except Exception as e: + f.write(f"无法读取文件内容: {e}\n") + f.write("\n") + + def get_directory_tree(self, root_dir, output_file): + tree = [] + for dirpath, dirnames, filenames in os.walk(root_dir): + level = dirpath.replace(root_dir, '').count(os.sep) + indent = '│ ' * (level) + tree.append(f"{indent}├── {os.path.basename(dirpath)}/") + subindent = '│ ' * (level + 1) + for f in filenames: + if os.path.join(dirpath, f) == output_file: + continue + tree.append(f"{subindent}├── {f}") + return "\n".join(tree) + "\n" + +if __name__ == '__main__': + app = QApplication(sys.argv) + app.setStyle('Fusion') + + # 设置全局字体 + font_path = os.path.join(os.path.dirname(__file__), 'HarmonyOS_Sans_SC_Regular.ttf') + font_id = QFontDatabase.addApplicationFont(font_path) + if font_id != -1: + font_family = QFontDatabase.applicationFontFamilies(font_id)[0] + font = QFont(font_family, 12) # 增加基础字体大小 + app.setFont(font) + + mainWin = ProjectExportTool() + mainWin.show() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/project_exporter.spec b/project_exporter.spec new file mode 100644 index 0000000..626589e --- /dev/null +++ b/project_exporter.spec @@ -0,0 +1,48 @@ +# -*- mode: python ; coding: utf-8 -*- + +import os + +block_cipher = None + +# 获取当前脚本所在的目录 +current_dir = os.path.dirname(os.path.abspath(SPEC)) +# 定义输出目录为当前目录 +output_dir = os.path.join(current_dir, 'build') + +a = Analysis(['main.py'], + pathex=[], + binaries=[], + datas=[('HarmonyOS_Sans_SC_Regular.ttf', '.'), ('README.md', '.'), ('LICENSE', '.')], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False) + +pyz = PYZ(a.pure, a.zipped_data, + cipher=block_cipher) + +exe = EXE(pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='项目文件导出工具', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon='icon-3种尺寸.ico', + distpath=output_dir) # 指定输出目录 \ No newline at end of file