长时间面对屏幕工作,眼睛需要被善待。EyeGuard 提供色温调节、定时休息、自动调度等全方位护眼方案,让护眼成为一种习惯。
- 从 Releases 下载最新的
EyeGuard.exe
- 双击运行,即刻启用
git clone https://github.com/zxz88601151/EyeGuard.git
cd EyeGuard
pip install -r requirements.txt
python main.py
pip install pyinstaller
pyinstaller --onefile --noconsole --name EyeGuard main.py
可选依赖:若需要更精准的硬件色温调节,安装 winsdk>=1.0.0b10;若未安装会自动降级至软件遮罩方案,功能不受影响。
| 功能模块 |
说明 |
| 🎨 色温调节 |
5 档预设 + 滑块微调 (1800K–6500K),系统级 GammaRamp |
| 🌓 智能调度 |
固定时间表 / 日出日落算法自动切换色温 |
| ⏰ 定时休息 |
遵循 20-20-20 法则,工作 / 休息周期可自定义 |
| 🖥️ RGB 软遮罩 |
4 种护眼色彩滤镜,低饱和不刺眼 |
| 🌑 暗角模式 |
屏幕边缘渐暗,减少周围视觉干扰 |
| 🔔 连续使用提醒 |
默认每 3 小时弹窗提醒起身活动 |
| 🛌 午休定时 |
指定时间提醒休息(默认 12:00) |
| ⌨️ 全局快捷键 |
亮度加减、一键夜间 / 恢复 |
| 🎨 屏幕取色器 |
拾取屏幕任意位置颜色,支持 RGB / HEX |
| 📏 屏幕标尺 |
测量像素距离和角度 |
| ⏱ 工作计时 |
记录每日累计使用时长 |
| 📅 日期计算器 |
日期差 / 日期加减 / 星期查询 |
| 控件 |
说明 |
| 色温预设 |
原厂标准 (6500K) / 柔和护眼 (5200K) / 日常护眼 (4200K) / 夜间暖光 (3000K) / 深夜睡眠 (1900K) |
| RGB 软遮罩 |
浅黄护眼 / 淡绿护眼 / 琥珀暖棕 / 灰蓝低饱和,可一键清除 |
| 色温滑块 |
1800K–6500K 精细调节,步进 100K |
| 亮度滑块 |
5%–100% 精细调节,步进 1% |
| 功能 |
说明 |
| 自动切换 |
基于固定时间表或日出日落算法(默认上海坐标),每 1 分钟自动检查 |
| 午休定时 |
设定时间到时弹窗提醒 |
| 暗角模式 |
径向渐变遮罩,中心透明 → 边缘黑色,强度可调 |
| 连续使用提醒 |
累计使用达阈值后弹窗建议休息 |
- 工作时长:30–90 分钟(默认 45 分钟)
- 休息时长:1–10 分钟(默认 3 分钟)
- 休息期间弹出全屏半透明遮罩 + 托盘气泡通知
- 遵循 20-20-20 法则:每 20 分钟看 20 英尺外 20 秒
| 工具 |
说明 |
| 🎨 色度计 |
鼠标吸色,实时显示 RGB / HEX,支持锁定和复制 |
| 📏 屏幕尺 |
拖拽测量两点间的像素距离和角度 |
| ⏱ 工作计时 |
今日累计使用时长,支持手动重置 |
| 📅 日期计算器 |
三种模式:计算日期差、日期加减 N 天、查询某日是星期几 |
- 开机自启开关(Windows 注册表
HKCU\Run)
- 全局快捷键一览
- 版本 & 开源版权信息
| 快捷键 |
功能 |
| Ctrl + Alt + ↑ |
亮度 +5% |
| Ctrl + Alt + ↓ |
亮度 -5% |
| Ctrl + Alt + N |
一键切换至夜间模式 (3000K) |
| Ctrl + Alt + R |
一键恢复至原厂标准 (6500K) |
| 模式 |
色温 |
适用场景 |
| 🔵 原厂标准 |
6500K |
白天、图片/视频编辑等色彩准确场景 |
| 🟢 柔和护眼 |
5200K |
日常办公,轻微暖色减少刺激 |
| 🟡 日常护眼 |
4200K |
长时间阅读、编码 |
| 🟠 夜间暖光 |
3000K |
晚间使用,减少蓝光 |
| 🔴 深夜睡眠 |
1900K |
睡前使用,最大程度降低蓝光 |
| 遮罩 |
RGB 值 |
效果 |
| 浅黄护眼 |
(255, 245, 225) |
暖黄纸张质感 |
| 淡绿护眼 |
(230, 250, 230) |
护眼绿,缓解疲劳 |
| 琥珀暖棕 |
(255, 232, 200) |
琥珀色温,复古风格 |
| 灰蓝低饱和 |
(235, 242, 250) |
冷静色调,降低饱和度 |
| 时段 |
模式 |
色温 |
| 07:00 – 18:00 |
白天模式 |
5200K |
| 18:00 – 22:00 |
夜间模式 |
3000K |
| 22:00 – 07:00 |
深夜模式 |
1900K |
基于经纬度计算当日日出日落时间,动态切换:
- 日出 ~ 日落 → 白天模式 5200K
- 日落 ~ 次日日出前 1 小时 → 夜间模式 3000K
- 午夜前后 → 深夜模式 1900K
默认坐标:上海 (31.2304, 121.4737),可在 core/auto_schedule.py 中修改。
EyeGuard/
├── main.py # 入口文件:初始化应用、托盘、主窗口
├── requirements.txt # Python 依赖清单
├── config/
│ ├── __init__.py
│ └── user_storage.py # 本地 JSON 配置读写
├── core/
│ ├── auto_schedule.py # 日出日落自动调度算法
│ ├── eye_timer.py # 定时休息循环 (工作/休息倒计时)
│ ├── screen_opt.py # 屏幕调节引擎 (GammaRamp + 硬件 + 遮罩三级降级)
│ ├── vignette.py # 暗角遮罩 (径向渐变)
│ └── work_timer.py # 每日工作计时
├── ui/
│ ├── color_picker.py # 屏幕取色器
│ ├── date_calculator.py # 日期计算工具
│ ├── main_widget.py # 主界面 (5 个标签页)
│ ├── screen_ruler.py # 屏幕标尺
│ ├── tray_menu.py # 系统托盘菜单
│ └── work_timer_tool.py # 工作计时面板
└── utils/
├── autostart_ctrl.py # 开机自启 (跨平台: Windows/macOS/Linux)
├── common_const.py # 全局常量、预设、快捷键定义
└── logger_setup.py # 日志配置
GammaRamp (SetDeviceGammaRamp) ← 系统级,ALT+TAB 后仍生效
↓ (失败时降级)
screen-brightness-control / winsdk ← 硬件 API 调节
↓ (失败时降级)
UI 全屏遮罩 ← 各平台通用兜底方案
所有硬件调用均包裹在 try/except 中,任意层级失败不会阻塞主程序,自动降级至下一方案。
配置文件位于 runtime_data/app_config.json,保存 18 项用户个性化设置:
| 配置项 |
默认值 |
说明 |
last_temperature |
4200 |
上次色温 (K) |
last_brightness |
75 |
上次亮度 (%) |
work_min |
45 |
工作时长 (分钟) |
rest_min |
3 |
休息时长 (分钟) |
auto_start |
false |
开机自启 |
timer_switch |
true |
定时休息开关 |
auto_schedule_on |
false |
自动调度开关 |
soft_filter_enabled |
false |
软遮罩开关 |
soft_filter_name |
null |
当前软遮罩 |
lunch_switch |
false |
午休提醒 |
dark_vignette |
false |
暗角模式 |
continuous_remind_on |
false |
连续使用提醒 |
| 技术 |
用途 |
| Python 3.9+ |
运行时 |
| PySide6 (Qt6) |
GUI 框架 |
| SetDeviceGammaRamp (Win32 API) |
系统级色温调节 |
| screen-brightness-control |
硬件亮度调节 |
| winsdk (可选) |
Windows 色温调节(最佳实践) |
| pyobjc (可选) |
macOS 系统 API |
| QHotkey |
全局快捷键 |
PySide6>=6.5.0 # GUI 框架
screen-brightness-control>=0.21.0 # 硬件亮度
winsdk>=1.0.0b10 (可选) # Windows 色温
pyobjc>=9.0 (可选) # macOS 系统 API
# 安装 PyInstaller
pip install pyinstaller
# 打包为单文件 (约 45MB)
pyinstaller --onefile --noconsole --name EyeGuard main.py
# 产物位于 dist/EyeGuard.exe
欢迎提交 Issue 和 Pull Request。在提交 PR 前请确保:
- 代码风格遵循 PEP 8
- 新功能包含恰当的错误处理和降级策略
- 运行时数据不硬编码(统一通过
config/user_storage.py 读写)
本项目基于 MIT 许可证开源 — 详见 LICENSE 文件。
EyeGuard — 护眼,从每一次调色开始 👁️