提交 ca417331 authored 作者: 陈泽健's avatar 陈泽健

feat(DocumentAutoOptimizationCalibration): 添加GUI界面和多项功能

- 新增GUI图形界面支持,使用tkinter框架实现可视化操作
- 添加PDF转换功能,通过win32com调用Word进行格式转换
- 添加网盘上传功能,支持SMB网络共享目录和UNC路径上传
- 实现GUI/CLI双模式运行,支持--gui参数启动图形界面
- 更新文档说明,添加GUI操作指南和快速开始章节
- 修改默认翻译引擎为bing以支持国内网络环境
- 重构代码结构,分离GUI、转换、上传等功能模块
- 添加打包脚本build.bat,支持PyInstaller生成独立exe文件
上级 c374deee
@echo off
chcp 65001 >nul
REM ============================================
REM 文档自动优化校准工具 - PyInstaller 打包脚本
REM 将工具打包为独立的 .exe 文件
REM ============================================
echo ========================================
echo 文档自动优化校准工具 - 打包脚本
echo ========================================
echo.
REM 检查 PyInstaller 是否安装
pip show pyinstaller >nul 2>&1
if errorlevel 1 (
echo [!] 未安装 PyInstaller,正在安装...
pip install pyinstaller
echo.
)
REM 检查项目依赖是否安装
echo [1/3] 检查依赖...
pip install python-docx translators pywin32 >nul 2>&1
echo 依赖检查完成
echo.
REM 执行打包
echo [2/3] 开始打包...
echo.
pyinstaller --onefile ^
--windowed ^
--name "文档优化工具" ^
--hidden-import=win32com.client ^
--hidden-import=win32timezone ^
--hidden-import=pythoncom ^
--hidden-import=pywintypes ^
--hidden-import=translators ^
--hidden-import=translators.apis ^
--hidden-import=docx ^
--hidden-import=docx.oxml ^
--hidden-import=docx.opc ^
--collect-all translators ^
run.py
echo.
REM 检查打包结果
if exist "dist\文档优化工具.exe" (
echo [3/3] 打包成功!
echo.
echo ========================================
echo 输出文件: dist\文档优化工具.exe
for %%A in ("dist\文档优化工具.exe") do echo 文件大小: %%~zA 字节
echo ========================================
echo.
echo 可以将 dist\文档优化工具.exe 分发给其他用户使用
) else (
echo [3/3] 打包失败,请检查错误信息
)
echo.
pause
......@@ -5,3 +5,9 @@ python-docx>=1.0.0
# 翻译库(用于文档国际化转换)
translators>=5.9.0
# Windows COM接口(用于PDF转换)
pywin32>=305
# 打包工具(仅开发时需要)
pyinstaller>=6.0.0
......@@ -4,20 +4,66 @@
使用方法:
python run.py # 交互式选择文档
python run.py --gui # 启动GUI界面
python run.py --input 文档.docx # 处理指定文档
python run.py --help # 查看帮助信息
"""
import sys
import os
from pathlib import Path
# 判断是否为 PyInstaller 打包后的环境
if getattr(sys, 'frozen', False):
# PyInstaller 打包后,使用 exe 所在目录作为项目根目录
PROJECT_ROOT = Path(sys.executable).parent
# 切换工作目录到 exe 所在目录(确保 reports/logs 等相对路径正确)
os.chdir(str(PROJECT_ROOT))
else:
# 开发环境,使用脚本所在目录
PROJECT_ROOT = Path(__file__).parent
# 将项目根目录添加到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
sys.path.insert(0, str(PROJECT_ROOT))
def main():
"""主入口,带错误兜底"""
# 打包后的 exe 无参数启动时,自动进入 GUI 模式
# 因为 --windowed 打包没有控制台,CLI 模式无法交互
if getattr(sys, 'frozen', False) and len(sys.argv) == 1:
sys.argv.append('--gui')
try:
from src.main import main as app_main
exit_code = app_main()
sys.exit(exit_code)
except Exception as e:
# 写错误日志到文件(exe 旁边)
try:
import traceback
log_path = Path(sys.executable).parent / "error.log"
with open(str(log_path), 'w', encoding='utf-8') as f:
f.write(f"程序启动失败:\n")
f.write(f"frozen: {getattr(sys, 'frozen', False)}\n")
f.write(f"executable: {sys.executable}\n")
f.write(f"argv: {sys.argv}\n")
f.write(f"\n{traceback.format_exc()}")
except Exception:
pass
# 弹窗显示错误
try:
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.withdraw()
messagebox.showerror("程序错误", f"程序启动失败:\n\n{e}")
root.destroy()
except Exception:
pass
sys.exit(1)
# 导入并运行主程序
from src.main import main
if __name__ == "__main__":
exit_code = main()
sys.exit(exit_code)
main()
......@@ -2,14 +2,13 @@
"""
文档自动优化校准工具 - 主入口模块
本模块是程序的主入口,负责初始化和启动应用
本模块是程序的主入口,负责初始化和启动应用。
支持 CLI 模式和 GUI 模式两种运行方式。
"""
import sys
from logging import getLogger
from src.cli import main as cli_main
logger = getLogger(__name__)
......@@ -17,16 +16,19 @@ def print_banner() -> None:
"""
打印欢迎横幅
"""
banner = """
from src.config import __version__
banner = f"""
╔════════════════════════════════════════════════════════════╗
║ ║
║ 文档自动优化校准工具 v1.0
║ 文档自动优化校准工具 v{__version__}
║ ║
║ 功能:统一Word文档格式样式 ║
║ - 标题格式统一 ║
║ - 正文格式统一 ║
║ - 表格格式统一 ║
║ - 页眉页脚设置 ║
║ - 文档国际化转换 ║
║ - PDF格式转换 ║
║ - 网盘上传 ║
║ ║
╚════════════════════════════════════════════════════════════╝
"""
......@@ -40,6 +42,7 @@ def print_usage_hint() -> None:
hint = """
使用提示:
python run.py # 交互式选择文档
python run.py --gui # 启动GUI界面
python run.py --help # 查看帮助信息
python run.py --input 文档.docx # 处理指定文档
"""
......@@ -50,15 +53,34 @@ def main() -> int:
"""
主入口函数
支持 --gui 参数启动图形界面,否则使用 CLI 命令行模式。
Returns:
退出码(0表示成功,非0表示失败)
"""
# 检测是否使用 GUI 模式
if '--gui' in sys.argv:
try:
from src.gui import main_gui
main_gui()
return 0
except ImportError as e:
print(f"错误: 无法启动GUI界面 - {str(e)}")
print("请确保已安装 tkinter 库")
return 1
except Exception as e:
logger.error("GUI异常: %s", e)
import traceback
logger.debug(traceback.format_exc())
return 1
# CLI 模式
try:
# 如果没有命令行参数或只是显示帮助,显示横幅
if len(sys.argv) == 1 or '--help' in sys.argv or '-h' in sys.argv:
print_banner()
# 调用CLI主函数
from src.cli import main as cli_main
exit_code = cli_main()
# 如果是交互模式且成功完成,打印使用提示
......
#!/bin/bash
# MySQL 深度检测脚本
# 在远程服务器上本地执行,避免 PowerShell -> plink 的引号传递问题
# 输出格式: KEY=VALUE 便于 PowerShell 解析
# 参数
CONTAINER="${1:-umysql}"
PASSWORD="$2"
if [[ -z "$PASSWORD" ]]; then
echo "ERROR: MySQL password not provided"
exit 1
fi
# 函数:安全执行SQL
mysql_exec() {
local sql="$1"
echo "$sql" | docker exec -i "$CONTAINER" mysql -u root -p"$PASSWORD" -N 2>/dev/null
}
# 输出标记
echo "===MYSQL_DEEP_START==="
# 1. 缓冲池命中率
echo "---CHECK:buffer_pool---"
BP_OUTPUT=$(mysql_exec "SHOW STATUS LIKE 'Innodb_buffer_pool_read%';")
if [[ -n "$BP_OUTPUT" ]]; then
READ_REQUESTS=$(echo "$BP_OUTPUT" | grep 'Innodb_buffer_pool_read_requests' | awk '{print $2}')
READ_DISK=$(echo "$BP_OUTPUT" | grep 'Innodb_buffer_pool_reads' | awk '{print $2}')
READ_REQUESTS=${READ_REQUESTS:-0}
READ_DISK=${READ_DISK:-0}
if [[ "$READ_REQUESTS" -gt 0 ]] 2>/dev/null; then
HIT_RATE=$(awk "BEGIN {printf \"%.2f\", ($READ_REQUESTS - $READ_DISK) / $READ_REQUESTS * 100}")
else
HIT_RATE="0.00"
fi
echo "read_requests=$READ_REQUESTS"
echo "read_disk=$READ_DISK"
echo "hit_rate=$HIT_RATE"
else
echo "result=empty"
fi
# 2. 慢查询状态
echo "---CHECK:slow_query---"
SLOW_OUTPUT=$(mysql_exec "SHOW VARIABLES LIKE 'slow_query_log'; SHOW STATUS LIKE 'Slow_queries';")
if [[ -n "$SLOW_OUTPUT" ]]; then
SLOW_ENABLED=$(echo "$SLOW_OUTPUT" | grep 'slow_query_log' | awk '{print $2}')
SLOW_COUNT=$(echo "$SLOW_OUTPUT" | grep 'Slow_queries' | awk '{print $2}')
SLOW_ENABLED=${SLOW_ENABLED:-OFF}
SLOW_COUNT=${SLOW_COUNT:-0}
echo "slow_enabled=$SLOW_ENABLED"
echo "slow_count=$SLOW_COUNT"
else
echo "result=empty"
fi
# 3. 连接使用率
echo "---CHECK:connections---"
CONN_OUTPUT=$(mysql_exec "SHOW STATUS LIKE 'Threads_connected'; SHOW VARIABLES LIKE 'max_connections';")
if [[ -n "$CONN_OUTPUT" ]]; then
CURRENT_CONN=$(echo "$CONN_OUTPUT" | grep 'Threads_connected' | awk '{print $2}')
MAX_CONN=$(echo "$CONN_OUTPUT" | grep 'max_connections' | awk '{print $2}')
CURRENT_CONN=${CURRENT_CONN:-0}
MAX_CONN=${MAX_CONN:-0}
if [[ "$MAX_CONN" -gt 0 ]] 2>/dev/null; then
CONN_RATE=$(awk "BEGIN {printf \"%.1f\", $CURRENT_CONN / $MAX_CONN * 100}")
else
CONN_RATE="0.0"
fi
echo "current_conn=$CURRENT_CONN"
echo "max_conn=$MAX_CONN"
echo "conn_rate=$CONN_RATE"
else
echo "result=empty"
fi
# 4. 主从复制状态
echo "---CHECK:replication---"
REPL_OUTPUT=$(mysql_exec "SHOW SLAVE STATUS\G")
if [[ -n "$REPL_OUTPUT" ]] && ! echo "$REPL_OUTPUT" | grep -q "Empty set"; then
IO_RUNNING=$(echo "$REPL_OUTPUT" | grep 'Slave_IO_Running:' | awk '{print $2}')
SQL_RUNNING=$(echo "$REPL_OUTPUT" | grep 'Slave_SQL_Running:' | awk '{print $2}')
SECONDS_BEHIND=$(echo "$REPL_OUTPUT" | grep 'Seconds_Behind_Master:' | awk '{print $2}')
echo "has_slave=yes"
echo "io_running=$IO_RUNNING"
echo "sql_running=$SQL_RUNNING"
echo "seconds_behind=$SECONDS_BEHIND"
else
echo "has_slave=no"
fi
# 5. TOP20 大表
echo "---CHECK:top_tables---"
TABLE_OUTPUT=$(mysql_exec "SELECT table_name, ROUND(data_length/1024/1024,2) AS data_mb, ROUND(index_length/1024/1024,2) AS idx_mb, table_rows FROM information_schema.TABLES WHERE table_schema NOT IN ('mysql','information_schema','performance_schema','sys') ORDER BY data_length DESC LIMIT 20;")
if [[ -n "$TABLE_OUTPUT" ]]; then
TABLE_COUNT=$(echo "$TABLE_OUTPUT" | grep -c '[^[:space:]]')
echo "table_count=$TABLE_COUNT"
echo "$TABLE_OUTPUT" | head -5 | while read line; do
echo "table:$line"
done
else
echo "result=empty"
fi
# 6. QPS 性能基线
echo "---CHECK:qps---"
QPS_OUTPUT=$(mysql_exec "SHOW STATUS LIKE 'Queries'; SHOW STATUS LIKE 'Uptime';")
if [[ -n "$QPS_OUTPUT" ]]; then
QUERIES=$(echo "$QPS_OUTPUT" | grep 'Queries' | awk '{print $2}')
UPTIME=$(echo "$QPS_OUTPUT" | grep 'Uptime' | awk '{print $2}')
QUERIES=${QUERIES:-0}
UPTIME=${UPTIME:-0}
if [[ "$UPTIME" -gt 0 ]] 2>/dev/null; then
QPS=$(awk "BEGIN {printf \"%.2f\", $QUERIES / $UPTIME}")
else
QPS="0.00"
fi
echo "queries=$QUERIES"
echo "uptime=$UPTIME"
echo "qps=$QPS"
else
echo "result=empty"
fi
echo "===MYSQL_DEEP_END==="
# 工具封装
## 代码路径
- 代码路径:[AuxiliaryTool/DocumentAutoOptimizationCalibration]
## 功能需求
### 功能目标
**目标:** 将文档自动优化校准工具封装为 GUI 界面应用程序,打包为独立 .exe 文件,可在任何 Windows 电脑上运行,无需安装 Python 环境,便于非技术人员使用。
### 需求描述
#### GUI 框架
- 沿用项目内 **tkinter** 框架(与 `FunctionalTestReportGeneration` 保持统一风格)。
- 在 tkinter 基础上尽可能美化界面,提升用户体验。
#### GUI 功能模块
工具界面需支持以下所有功能模块:
| 功能模块 | 说明 |
|---------|------|
| 文件选择 | 选择待处理的 .docx 文档(文件浏览对话框,支持拖拽或手动输入路径) |
| 模式选择 | 选择"格式优化"或"国际化翻译"模式 |
| 目标语言选择 | 翻译模式时可选目标语言(英文、韩文、法文、日语、俄语、西班牙语、阿拉伯语) |
| 翻译引擎选择 | 可选翻译引擎(google / baidu / bing),默认 bing |
| PDF 转换选项 | 复选框:是否在处理后转换为 PDF 格式 |
| 网盘上传选项 | 复选框 + 路径输入框:是否上传至网盘,支持手动输入路径或浏览选择 |
| 进度显示 | 处理过程中实时显示进度状态 |
| 日志面板 | 实时显示处理日志信息(信息、警告、错误分色显示) |
| 查看输出 | 处理完成后支持打开输出文件或打开输出文件夹 |
#### 界面布局
-**易用性**为核心设计原则,操作步骤直观清晰。
- 建议采用分区布局:顶部文件选择 → 中部参数配置 → 底部操作按钮与日志面板。
#### 打包分发格式
- 使用 **PyInstaller** 打包为**单文件 .exe**`--onefile` 模式)。
- 目标用户为非技术人员,单文件便于分发和使用。
- 运行环境:Windows 系统,无需安装 Python。
#### 依赖处理
- Python 运行环境、python-docx、translators、pywin32 等依赖**全部打包进 .exe**,目标电脑无需额外安装。
- **PDF 转换功能**依赖 Microsoft Word:
- **程序启动时自动检测**本机是否安装 Microsoft Word。
- 若已安装 Word:PDF 转换功能正常使用,复选框可选。
- 若未安装 Word:PDF 转换复选框**禁用**,鼠标悬停时提示"需安装 Microsoft Word"。
- 其他功能(格式优化、翻译、上传)**不受影响**,无需 Word 即可使用。
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
# 工具封装_实现计划
## 1. 背景与目标
### 背景
文档自动优化校准工具已具备格式优化、国际化翻译、PDF 转换、网盘上传四大功能,但仅支持 CLI 命令行操作,非技术人员使用门槛高。
### 目标
封装为 tkinter GUI 桌面应用,使用 PyInstaller 打包为独立 .exe,在任意 Windows 电脑上免安装 Python 直接运行。
---
## 2. 项目结构(变更部分)
```
AuxiliaryTool/DocumentAutoOptimizationCalibration/
├── src/
│ ├── config.py # 配置模块(不变)
│ ├── gui.py # ★ 新增:GUI 界面模块
│ ├── converter.py # PDF 转换模块(不变)
│ ├── uploader.py # 网盘上传模块(不变)
│ ├── cli.py # 命令行接口(不变)
│ ├── optimizer.py # 文档优化模块(不变)
│ ├── internationalizer.py # 国际化模块(不变)
│ └── main.py # 主入口(修改:添加 --gui 入口)
├── build.bat # ★ 新增:PyInstaller 打包脚本
├── run.py # 入口脚本(修改:添加 --gui 参数)
├── requirements.txt # 依赖列表(更新:添加 pywin32)
└── ...
```
---
## 3. 功能模块设计
### 3.1 新增模块:GUI 界面 (src/gui.py)
参考 `FunctionalTestReportGeneration/src/gui.py` 的设计模式,但进行美化和功能适配。
#### 界面布局
```
╔══════════════════════════════════════════════╗
║ 文档自动优化校准工具 v1.5.0 ║ ← 标题栏(深蓝色背景)
╠══════════════════════════════════════════════╣
║ 📄 文件选择 ║
║ ┌──────────────────────────┐ ┌──────┐ ║
║ │ 请选择 .docx 文件... │ │ 浏览 │ ║ ← 文件选择区
║ └──────────────────────────┘ └──────┘ ║
╠══════════════════════════════════════════════╣
║ ⚙ 处理设置 ║
║ 处理模式: [格式优化 ▼] ║
║ 目标语言: [英文 ▼] (翻译模式可见) ║ ← 参数配置区
║ 翻译引擎: [bing ▼] (翻译模式可见) ║
║ ☐ 转换为PDF格式 ║
║ ☐ 上传至网盘 路径: [________________] ║
╠══════════════════════════════════════════════╣
║ 📋 处理日志 ║
║ ┌──────────────────────────────────────┐ ║
║ │ 正在处理文档... │ ║ ← 日志面板
║ │ ✓ 文档优化完成 │ ║ (分色显示)
║ │ 正在转换为PDF... │ ║
║ └──────────────────────────────────────┘ ║
║ [████████████████████ ] 60% ║ ← 进度条
╠══════════════════════════════════════════════╣
║ [ 🚀 开始处理 ] [ 📂 打开输出 ] [退出] ║ ← 操作按钮
╚══════════════════════════════════════════════╝
```
#### GUI 类设计
| 类/函数 | 功能描述 |
|---------|---------|
| `DocumentOptimizerGUI` | 主 GUI 类 |
| `_create_title_bar()` | 标题栏 |
| `_create_file_selection()` | 文件选择区域 |
| `_create_settings_area()` | 处理设置区域(模式、语言、引擎、PDF、上传) |
| `_create_log_area()` | 日志面板(分色显示) |
| `_create_progress_bar()` | 进度条 |
| `_create_button_area()` | 操作按钮区域 |
| `_on_mode_change()` | 模式切换时显示/隐藏翻译相关选项 |
| `_on_start()` | 开始处理(后台线程) |
| `_process_thread()` | 后台处理线程 |
| `_check_word_available()` | 启动时检测 Word,控制 PDF 复选框状态 |
| `main_gui()` | GUI 入口函数 |
### 3.2 修改模块:主入口 (src/main.py)
- 添加 `--gui` 参数支持
- 检测 `--gui` 后调用 `main_gui()`
---
## 4. 详细实现步骤
### 4.1 实现 GUI 界面模块 (src/gui.py)
- [ ] 创建 `DocumentOptimizerGUI`
- [ ] 实现 `_create_title_bar()` 标题栏(深蓝背景、白色大字标题)
- [ ] 实现 `_create_file_selection()` 文件选择区域
- [ ] 文件路径输入框 + 浏览按钮
- [ ] 支持 .docx 文件过滤
- [ ] 实现 `_create_settings_area()` 处理设置区域
- [ ] 处理模式下拉框(格式优化 / 国际化翻译)
- [ ] 目标语言下拉框(翻译模式可见)
- [ ] 翻译引擎下拉框(翻译模式可见)
- [ ] PDF 转换复选框(启动时检测 Word 可用性)
- [ ] 网盘上传复选框 + 路径输入框
- [ ] 实现 `_on_mode_change()` 模式切换联动
- [ ] 选择"格式优化"时隐藏语言和引擎选项
- [ ] 选择"国际化翻译"时显示语言和引擎选项
- [ ] 实现 `_create_log_area()` 日志面板
- [ ] ScrolledText 控件
- [ ] 分色标签(info=黑色, success=绿色, error=红色, warning=橙色)
- [ ] 实现 `_create_progress_bar()` 进度条
- [ ] 实现 `_create_button_area()` 操作按钮
- [ ] 开始处理按钮
- [ ] 打开输出文件夹按钮
- [ ] 退出按钮
- [ ] 实现 `_check_word_available()` Word 检测
- [ ] 启动时调用 `converter._check_word_available()`
- [ ] 未安装 Word 时禁用 PDF 复选框 + 提示
- [ ] 实现 `_on_start()` 开始处理逻辑
- [ ] 验证文件路径
- [ ] 禁用开始按钮
- [ ] 启动后台处理线程
- [ ] 实现 `_process_thread()` 后台处理线程
- [ ] 格式优化模式:调用 `optimize_document()`
- [ ] 翻译模式:调用 `internationalize_document()`
- [ ] PDF 转换:勾选时调用 `convert_to_pdf()`
- [ ] 网盘上传:勾选时调用 `upload_to_network()`
- [ ] 实时日志输出到 GUI
- [ ] 完成后恢复按钮状态
- [ ] 实现 `main_gui()` 入口函数
### 4.2 修改主入口模块 (src/main.py)
- [ ] 添加 `--gui` 命令行参数
- [ ] 检测到 `--gui` 时调用 `main_gui()`
### 4.3 新增打包配置
- [ ] 新建 `build.bat` 打包脚本
- [ ] PyInstaller `--onefile` 模式
- [ ] 设置窗口图标和版本信息
- [ ] 处理 win32com 隐式导入
- [ ] 更新 `requirements.txt` 添加 `pywin32`
---
## 5. 关键技术要点
### 5.1 GUI 线程安全
所有耗时操作在后台线程执行,GUI 更新通过 `root.after()` 回调到主线程:
```python
thread = threading.Thread(target=self._process_thread, daemon=True)
thread.start()
# 在线程中更新GUI
self.root.after(0, lambda: self._log("处理完成", "success"))
```
### 5.2 模式联动
监听下拉框变化事件,动态显示/隐藏翻译相关选项:
```python
self.mode_var.trace_add("write", self._on_mode_change)
```
### 5.3 PyInstaller 打包
```bash
pyinstaller --onefile --windowed --name "文档优化工具" run.py
```
- `--onefile`: 打包为单个 .exe
- `--windowed`: 不显示控制台窗口
- `--hidden-import`: 处理 pywin32 等隐式依赖
### 5.4 stdout 重定向
将核心模块的 print 输出重定向到 GUI 日志面板:
```python
class TextRedirector:
def write(self, text):
self.widget.insert(tk.END, text, "info")
self.widget.see(tk.END)
sys.stdout = TextRedirector(self.log_text)
```
---
## 6. 验证测试
### 测试步骤
1. 运行 `python run.py --gui` 验证 GUI 启动正常
2. 测试格式优化模式:选择文件 → 开始处理 → 查看日志和输出
3. 测试翻译模式:切换模式 → 选语言 → 开始处理
4. 测试 PDF 转换:勾选 PDF → 验证转换结果
5. 测试网盘上传:勾选上传 → 输入路径 → 验证上传
6. 运行 `build.bat` 打包为 .exe → 在无 Python 环境的电脑上运行
### 验收标准
- [ ] GUI 启动正常,界面布局美观
- [ ] 格式优化和翻译功能在 GUI 中正常工作
- [ ] PDF 复选框根据 Word 安装状态自动启用/禁用
- [ ] 日志面板实时显示处理进度
- [ ] 网盘上传功能正常
- [ ] 打包后的 .exe 可在无 Python 环境运行
---
## 7. 参考文件
| 文件路径 | 用途 |
|---------|------|
| `FunctionalTestReportGeneration/src/gui.py` | tkinter GUI 实现参考 |
| `FunctionalTestReportGeneration/src/main.py` | GUI 入口调度参考 |
---
## 8. 版本历史
| 版本 | 日期 | 说明 |
|------|------|------|
| v1.5.0 | 2026-06-07 | 新增 GUI 界面 + PyInstaller 打包 |
---
## 9. 实现状态
### 已完成功能
- [x] GUI 界面模块 (gui.py)
- [x] 主入口 --gui 参数 (main.py)
- [x] 打包脚本 (build.bat)
### 待验证功能
- [ ] GUI 功能测试验证
- [ ] .exe 打包测试
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论