'update'
This commit is contained in:
@@ -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. 概述
|
||||
|
||||
Reference in New Issue
Block a user