Skip to content

Repository files navigation

WorkTimer

WorkTimer(工作休息提醒)是一款完全本地运行的 PyQt6 系统托盘应用,用来提醒长时间工作的用户定时休息。应用不需要账号或网络连接。 alt text

功能

  • 启动后驻留系统托盘并自动开始计时
  • macOS 运行时仅显示菜单栏图标,不占用程序坞
  • 1–1440 分钟的自定义工作时长,以及 30、45、60、90 分钟快捷选项
  • 单次计时与自动循环计时
  • 轻度、标准、强提醒、超强提醒四级提醒
  • 配置自动保存,异常配置安全回退
  • 防止重复运行多个实例
  • 支持 Windows、macOS 与 Ubuntu 打包

默认设置为 60 分钟、循环模式、强提醒。循环模式每次到期都会立即开始下一轮;单次模式到期后停止。

提醒强度

强度 系统通知 提示音 额外界面
轻度
标准
强提醒 置顶确认弹窗
超强提醒 黑屏休息 1 分钟

系统通知是否显示还取决于操作系统的通知权限。强提醒仍会通过独立弹窗提醒。 超强提醒会覆盖所有显示器并显示 60 秒倒计时;如有紧急事项,需要打开紧急解除面板并输入当次随机生成的 6 位验证码。它不会阻止操作系统级的强制退出或任务切换。

开发运行

需要 Python 3.11 或更新版本。

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[test]"
python -m worktimer

Windows PowerShell 激活虚拟环境:

.\.venv\Scripts\Activate.ps1

运行测试:

QT_QPA_PLATFORM=offscreen pytest

配置

配置通过界面修改,保存在 Qt 提供的当前用户应用配置目录下,文件名为 config.json。公开字段如下:

{
  "duration_minutes": 60,
  "timer_mode": "loop",
  "alert_level": "strong"
}

timer_mode 可取 singleloopalert_level 可取 lightstandardstrongultra

构建发行包

Windows PowerShell:

.\build-windows.ps1

macOS:

chmod +x build-macos.sh
./build-macos.sh

Ubuntu:

chmod +x build-linux.sh
./build-linux.sh

Ubuntu 构建产物为 WorkTimer-Ubuntu-x64.tar.gz。解压后可直接运行其中的 WorkTimer;目标系统需要图形桌面和系统托盘支持。自动发布使用 Ubuntu 24.04 x64 构建环境。

如果系统默认的 python3 早于 3.11,可显式指定解释器:

PYTHON_BIN=/path/to/python3.13 ./build-macos.sh
PYTHON_BIN=/path/to/python3.13 ./build-linux.sh

生成结果位于 dist/。公开分发 macOS 应用前仍需使用 Apple Developer 证书签名并完成公证。

自动发布 Release

项目包含 GitHub Actions 发布工作流。推送 v*.*.* 格式的版本标签后,GitHub 会先运行测试,再分别构建 Windows x64、Ubuntu x64、macOS Apple Silicon 和 macOS Intel 安装包,最后自动创建 Release 并附上 SHA-256 校验文件。

发布新版本前,请同步修改 pyproject.tomlsrc/worktimer/__init__.py 中的版本号并提交。例如发布 1.0.1

git tag v1.0.1
git push origin v1.0.1

标签版本必须与程序版本一致,否则工作流会停止发布。构建进度可在 GitHub 仓库的 Actions 页面查看,完成后可在 Releases 页面下载安装包。

当前 macOS 自动构建产物未进行 Apple Developer 签名或公证,首次打开时可能受到 Gatekeeper 限制。正式公开分发前仍建议配置证书签名和 Apple 公证。

About

A local PyQt6 system-tray work break reminder

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages