This commit is contained in:
douboer
2025-09-07 01:19:00 +08:00
parent 5e1788884f
commit c463e3b785
31 changed files with 3124 additions and 61 deletions

View File

@@ -19,6 +19,53 @@
- 所有统计均以“分钟”为单位,便于可视化和分析。
- 年度统计遍历今年每一天,保证月度和年度数据完整。
- 统计逻辑与实际阅读行为高度贴合,支持无笔记但有打开书籍的场景。
## 可视化设计(统计标签页)
布局:统计页使用 2x2 宫格:
- 左上frame_bubble综合指标气泡图。
- 右上frame_year全年 12 个月阅读时长柱状图。
- 左下 (frame_week):最近 7 天阅读时长柱状图索引0=今天)。
- 右下 (frame_month):最近 30 天阅读时长柱状图索引0=今天)。
数据来源:
- 周图:`get_total_readtime(days=7)` 结果列表(单位:分钟)。
- 月图:`get_total_readtime(days=30)` 结果列表(单位:分钟)。
- 年图:`get_total_readtime12m()` 返回长度 12 列表(分钟)。
- 综合:
* 全年阅读小时数 = `get_total_readtime_year() / 60`向下取整或保留1位小数
* 月均阅读小时数 = `(sum(month_list) / 12) / 60`
* 近7天阅读小时数 = `sum(week_list) / 60`
* 日均阅读分钟数 = `sum(month_list[:30 或 recent30]) / 30`使用最近30天合计除以30
气泡图:
- 使用 4 个气泡分别表示上述四项指标。
- 半径 r ~ sqrt(value_normalized) 以减弱大值差异;对“小时数”统一换算为分钟后再归一。
- 颜色建议:全年(蓝)、月均(橙)、近7天(绿)、日均(紫)。
- 文本格式:`标签\n数值+单位`,例如:`全年\n120h``日均\n45min`
渲染技术(已更新):
- 使用原生 Qt 自绘组件QWidget + QPainter实现柱状图与气泡图文件 `charts.py`
- 优势:减少第三方依赖(移除 matplotlib启动更快、打包体积更小自绘可精细掌控布局与样式。
- 结构:
* `BarChartWidget`:通用柱状图组件,支持数值标签、自适应缩放、单位显示。
* `BubbleMetricsWidget`:四指标气泡图,按归一化后的平方根缩放半径,支持动态指标扩展。
- 刷新策略:当前初始化时构建;若后续增加刷新按钮,可对组件调用 setData/setMetrics 后 update()。
更新策略:
1. 启动时已调用 `sync_source_files`,再构建 `BookListManager`
2. 通过管理器获取三类聚合数据。
3. 生成 numpy 数组(可选)并绘制。
4. 若无数据(全 0显示占位提示“暂无阅读数据”。
异常处理:
- 捕获绘图异常ImportError/RuntimeError在 frame 中放置 QLabel 显示错误信息而不是抛出。
后续扩展:
- 柱状图支持堆叠 / 渐变填充、鼠标 hover tooltip。
- 气泡图支持动画过渡或改为雷达/仪表盘形式。
- 增加刷新按钮与 Esc 退出全屏逻辑。
# iBooks 笔记导出工具 详细设计文档
## 1. 概述