把你的书籍目录变成一间深色书房——木纹书架、真实封面、书签丝带与烛光夜读。 纯 Python 桌面工具,本地运行,不改原书一字一节。
程序化绘制的木纹背景与层板——年轮曲线、颗粒、暗角,不依赖任何图片素材。 书籍以真实封面(PDF 首页渲染)立于架上,最近阅读 / 收藏 / 全部三区分栏。
PyMuPDF 2 倍超采样渲染,50%–300% 缩放、适配页宽、跳页直达; 米白纸底配色,内置「烛光」夜间模式,侧栏展示文档目录(TOC)。
当前页加书签并附备注,红丝带标记书签页;阅读页上拖框即高亮, 以 PDF 坐标存储叠加显示——原文件不做任何修改。
右键收藏入「收藏 ★」分区;自动记录阅读进度,封面「在读 N%」角标一目了然, 重开自动续读到上次停留的页面。
GitHub 开源书库、arXiv 论文、Gutenberg 公版书、URL 直链, 还支持自定义 JSON 规则书源对接自有站点;下载后自动入库重扫。
自动清理 Z-Library / ISBN / 内容哈希等下载后缀噪声,还书籍一个干净书名; 顶栏输入即时过滤书架。
声明 Per-Monitor DPI Awareness,高分屏下封面与文字锐利不模糊; 独立 AppUserModelID 使任务栏正确显示应用图标。
后台线程扫描 + 主线程事件泵,单条消息异常不拖垮轮询; 回调异常落盘 data/crash.log,告别「按钮点了没反应」。
| 操作 | 快捷键 / 方式 |
|---|---|
| 打开书籍 | 双击封面 |
| 翻页 | ← → PageUp PageDown / 滚轮;Home End 首末页 |
| 缩放 | 工具栏 + / -(50%–300%);「适配页宽」一键适配 |
| 添加书签 | 工具栏「加书签」→ 填写备注(可选) |
| 文字高亮 | 阅读页按住左键拖框 → 回车确认(可附备注) |
| 目录 / 书签 / 高亮 | 左侧栏三个标签页,双击条目跳转 |
| 收藏管理 | 封面右键菜单:收藏 / 打开所在文件夹 / 重命名显示标题 |
| 返回书架 | 阅读工具栏「◂ 书架」;书源界面按 Esc |
| 书源 | 说明 |
|---|---|
| GitHub 开源书库 | 关键词搜索开源书籍仓库 → 列出其中 PDF / EPUB / TXT → 下载入库。jsDelivr 主通道 + raw 备用,可选配 Token 提升限额 |
| arXiv 论文 | 检索预印本直接下载 PDF;触发官方限流时自动退避重试并友好提示 |
| Gutenberg 公版书 | 输入书号(如 1342)下载公版 TXT / EPUB |
| URL 直链导入 | 粘贴任意 http(s) 书籍直链直接入库 |
| 自定义书源 ◆ | JSON 规则引擎:search_url 模板(含 {q} 占位符)+ results_path 结果路径 + 字段映射,可对接任何自有站点 API |
| 1 · 安装 Python | 3.10+ 官方安装包(自带 tkinter),勾选 Add to PATH |
| 2 · 安装依赖 | pip install pymupdf pillow |
| 3 · 启动 | 双击 launcher.bat,首次启动选择你的书籍目录即可 |
# 克隆并进入项目 git clone https://github.com/yohoten/PyShelf.git cd PyShelf # 安装运行依赖(PyMuPDF 负责 PDF 渲染,Pillow 负责封面/木纹处理) pip install pymupdf pillow # 启动:双击 launcher.bat,或手动运行 python app.py
launcher.bat :: 正常启动(pythonw 无控制台窗口) launcher.bat debug :: 控制台运行,报错直接可见,可追加参数 launcher.bat debug --smoke
PyMuPDF 页面位图 → Pillow 书脊高光 / 圆角 / 投影合成 → tkinter Canvas 显示
木纹 = 渐变 + 年轮曲线 + 高斯颗粒 + 暗角,全部运行时生成,零图片素材
慢 IO(扫描 / 探测 / 封面 / 下载)在后台线程,书库增删一律回主线程,杜绝竞态
data/library.json 保存书籍、收藏、书签、高亮与进度;整目录拷走即可迁移
PyShelf/ ├─ launcher.bat # 启动脚本(GBK+CRLF,自动探测解释器,支持 debug) ├─ app.py # 入口:视图切换、后台扫描、事件泵、持久化 ├─ app.ico # 多分辨率应用图标(16–128px) ├─ core/ │ ├─ library.py # Book 数据模型 + library.json 读写 │ ├─ scanner.py # 目录扫描、标题清洗、封面生成 │ ├─ pdf_engine.py # PyMuPDF 渲染 / 目录 / 高亮叠加 / 烛光滤镜 │ ├─ sources.py # 书源引擎(GitHub / arXiv / Gutenberg / 自定义) │ └─ downloader.py # 后台下载器(进度回报、备用通道) └─ ui/ ├─ theme.py # 配色 / DPI / 字体 / 木纹纹理 / 封面渲染 ├─ shelf_view.py # Canvas 拟物书架 ├─ reader_view.py # 阅读器(超采样渲染 / 翻页 / 书签 / 高亮) ├─ sidebar.py # 目录 / 书签 / 高亮侧栏 └─ source_view.py # 书源检索面板