# FluxClass **Repository Path**: codekpy/class-view ## Basic Information - **Project Name**: FluxClass - **Description**: 一个功能完善的 PyQt6 桌面课表管理系统,专为 Windows 平台设计。系统提供顶部半透明毛玻璃效果显示窗口,支持系统托盘图标、全屏检测、智能隐藏等功能,适合学生日常使用。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-28 - **Last Updated**: 2026-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FluxClass 一个功能完善的 PyQt6 桌面课表管理系统,专为 Windows 平台设计。系统提供顶部半透明毛玻璃效果显示窗口,支持系统托盘图标、全屏检测、智能隐藏等功能,适合学生日常使用。 ## 功能特点 ### 🪟 显示窗口 - 顶部半透明毛玻璃效果 - 鼠标悬浮时透明度降低并启用穿透 - 显示当前课程、下节课、倒计时 - 支持天气和热搜信息显示 - 支持倒计日和值日信息显示 - 可自定义组件显示顺序 ### 🖱️ 系统托盘 - 系统托盘图标,右键菜单操作 - 快速显示/隐藏窗口 - 打开设置和关于对话框 - 退出程序 ### 📺 智能显示 - 全屏检测,自动隐藏/显示 - 上课自动隐藏,下课自动显示 - 点击窗口隐藏功能 - 配置文件自动刷新 - 波浪提醒(上课预备铃全屏橙色波浪扩散效果) ### 📂 配置管理 - 多配置文件支持(Profiles) - 快速切换不同配置 - 导出 CECS 通用课程表格式(兼容 ClassIsland) ### 📝 课程管理 - 每日事件序列编辑器(支持拖拽) - 课程表编辑器(支持单双周/四周轮换) - 任课教师管理 - 课程选择器(快速填充课程和教师) - 显示课间和自定义事件(不可编辑) ### 🤖 自动化任务 - 可视化节点编辑器,拖拽创建自动化流程 - 支持5种触发器类型(每天、每周、每月、指定周次、课程名称) - 支持3种操作类型(终端执行、打开文件、打开网址) - 任务启用/禁用管理 - 任务列表管理(新建、编辑、删除) - 任务调度器自动检测触发条件并执行操作 ### 🔔 音效提醒 - 预备铃音效(上课前提醒) - 正铃音效(上课开始) - 下课铃音效(下课提醒) - 支持自定义音效文件(WAV、MP3、OGG) - 音量调节(0-100%) - 试听功能 ### ⏱️ 倒计时窗口 - 上课期间显示课程结束倒计时 - 倒梯形形状,美观设计 - 半透明黑色背景 - 固定在屏幕顶部居中显示 ### 📢 通知窗口 - 全屏通知框,显示预备铃和正铃提醒 - 蓝色背景带阴影效果 - 从上到下滑入动画 - 3秒后自动隐藏 ### 📝 临时课表编辑器 - 临时修改单日课表,不影响原配置 - 支持选择特定日期和周次 - 编辑课程名称、地点、教师 - 应用修改后立即生效 ### 📚 帮助中心 - 集成文档浏览功能 - 左侧文档列表,右侧内容显示 - 支持 Markdown 格式文档 - 支持外部链接打开 ### 🧙 配置向导 - 首次使用时的引导式配置流程 - 分步骤设置基本信息 - 支持跳过向导,使用默认配置 ### 📅 其他功能 - 倒计日管理(添加、编辑、删除) - 值日管理(支持基准值设置,修正放假、考试偏差) - 导出 CECS 通用课程表格式(兼容 ClassIsland) ### ⚙️ 设置界面 - Fluent 风格统一设置对话框 - 模块化设计,功能分类清晰 - 基本设置、组件控制、事件序列、课程表、任课教师、倒计日、值日、音效、配置管理、自动化、关于等11个页面 - 设置窗口底部提供重启程序按钮 ## 环境要求 - Python 3.10+ - PyQt6 >= 6.10.2 - pywin32 >= 311 - requests >= 2.31.0 - winshell >= 0.6 ## 安装 1. 创建虚拟环境: ```bash python -m venv venv ``` 2. 激活虚拟环境: ```bash # Windows venv\Scripts\activate ``` 3. 安装依赖: ```bash pip install -r requirements.txt ``` ## 使用说明 ### 首次使用 1. 运行程序: ```bash python main.py ``` 2. 在系统托盘找到课表图标 3. 右键点击图标,选择"设置" 4. 配置基本设置: - 设置学期开始日期 - 调整课程时长、课间时长、预备提醒时间 - 配置窗口透明度和尺寸 5. 添加任课教师: - 进入"任课教师"页面 - 添加教师姓名和任教科目 6. 创建事件序列: - 进入"事件序列"页面 - 点击"添加上课"、"添加课间"或"添加其他" - 通过拖拽调整事件顺序 - 点击"保存为预设"保存序列 7. 编辑课程表: - 进入"课程表"页面 - 选择星期和事件序列预设 - 点击课程表格中的单元格选中 - 点击右侧课程选择器的按钮自动填充课程和教师 - 填写课程名称、地点、教师 - 保存课程表 ### 日常使用 - 顶部窗口会自动显示当前课程和下节课信息 - 显示内容包括:天气、热搜、时间、日期、课程时间轴、倒计日、值日信息 - 通过托盘图标控制显示/隐藏窗口 - 全屏时窗口会自动隐藏 - 上课时自动隐藏,下课时自动显示 ### 值日管理 1. 进入"值日"页面 2. 设置值日配置: - 设置基准日期和基准序号 - 选择轮值模式(周轮值/日轮值) - 选择轮值单位(组/个人) - 设置总组数或总人数 - 配置跳过的序号 3. 查看当前值日预览 ### 倒计日管理 1. 进入"倒计日"页面 2. 添加倒计日: - 输入倒计日名称 - 选择目标日期 3. 编辑或删除倒计日 ### 导出 CECS 课程表 1. 进入"配置管理"页面 2. 点击"导出 CECS 格式"按钮 3. 选择保存位置 4. 导出的 YAML 文件可用于 ClassIsand 等课程表软件 ### 波浪提醒 1. 在"基本设置"页面设置预备提醒时间(例如 5 分钟) 2. 当距离上课前达到设定时间时,系统会自动显示全屏橙色波浪扩散效果 3. 波浪提醒会在 5 秒后自动关闭 4. 也可以通过运行 `test_wave_reminder.py` 测试波浪提醒效果 ### 多配置文件管理 1. 进入"配置管理"页面 2. 查看当前配置文件列表 3. 点击"添加配置"创建新的配置文件 4. 点击"切换配置"在不同配置文件之间切换 5. 点击"删除配置"删除不需要的配置文件 6. 适用场景: - 多学期管理:为不同学期创建独立配置 - 多班级管理:教师管理多个班级的课程表 - 备份与恢复:创建配置备份 ### 自动化任务管理 1. 进入"自动化"页面 2. 新建任务: - 点击"新建任务"按钮 - 在节点编辑器中点击工具栏按钮添加触发器和操作 - 通过拖拽连接触发器和操作节点 - 配置触发器参数(时间、周次、课程名称等) - 配置操作参数(命令、文件路径、网址等) - 点击"保存"按钮保存任务 3. 管理任务: - 在任务列表中查看所有任务 - 点击"编辑"按钮修改任务 - 点击"启用/禁用"按钮切换任务状态 - 点击"删除"按钮删除任务 4. 触发器类型说明: - **每天触发**:在指定时间每天触发一次 - **每周触发**:在指定星期几的指定时间触发 - **每月触发**:在每月指定日期的指定时间触发 - **指定周次触发**:在单周/双周/三周/四周的指定星期和时间触发 - **课程名称触发**:当开始指定课程时触发 5. 操作类型说明: - **终端执行**:执行 PowerShell 命令 - **打开文件**:使用系统默认程序打开指定文件 - **打开网址**:在浏览器中打开指定网址 ## 项目结构 ``` schedule-system/ ├── main.py # 主程序入口,ScheduleSystem 类 ├── config.py # 配置管理模块,Config 类 ├── scheduler.py # 调度器模块,Scheduler/Event/EventType 类 ├── tray_icon.py # 系统托盘图标模块,TrayIcon 类 ├── display_window.py # 显示窗口模块,DisplayWindow 类 ├── fullscreen_detector.py # 全屏检测模块,FullScreenDetector 类 ├── wave_reminder.py # 波浪提醒窗口,上课预备铃提醒 ├── notification_window.py # 通知窗口模块 ├── countdown_window.py # 倒计时窗口模块 ├── config_wizard.py # 配置向导,首次使用引导 ├── temp_schedule_editor.py # 临时课表编辑器 ├── help_center.py # 帮助中心,文档浏览 ├── event_editor.py # 事件序列编辑器 ├── schedule_editor.py # 课程表编辑器 ├── about_dialog.py # 关于对话框 ├── loading_window.py # 加载窗口 ├── error_logger.py # 错误日志记录模块,ErrorLogger 类 ├── autostart.py # 开机自启动模块,AutoStartManager 类 ├── unified_settings_v2.py # 统一设置对话框(模块化版本) ├── automation/ # 自动化任务模块 │ ├── __init__.py # 模块初始化 │ ├── task_model.py # 任务数据模型 │ ├── task_scheduler.py # 任务调度器 │ ├── node.py # 节点类 │ ├── node_editor.py # 节点编辑器 │ ├── node_connection.py # 节点连接管理 │ ├── trigger_config_dialog.py # 触发器配置对话框 │ └── action_config_dialog.py # 操作配置对话框 ├── settings/ # 设置界面模块包 │ ├── __init__.py │ ├── fluent_components.py # Fluent 风格组件 │ ├── basic_page.py # 基本设置页面 │ ├── components_page.py # 组件控制页面 │ ├── events_page.py # 事件序列页面 │ ├── schedule_page.py # 课程表页面 │ ├── teacher_page.py # 任课教师页面 │ ├── countdown_page.py # 倒计日页面 │ ├── duty_page.py # 值日管理页面 │ ├── sound_page.py # 音效设置页面 │ ├── config_manager_page.py # 配置管理页面 │ ├── automation_page.py # 自动化设置页面 │ └── about_page.py # 关于页面 ├── test_wave_reminder.py # 波浪提醒效果测试文件 ├── requirements.txt # 依赖列表 ├── pip.ini # pip 配置(清华源) ├── README.md # 说明文档 ├── AGENTS.md # 开发文档 └── LICENSE # 许可证 ``` ## 配置文件 配置文件存储在 `~/.schedule-system/` 目录下 - Windows: `C:\Users\用户名\.schedule-system\` **多配置文件支持:** - `config.json` - 默认配置文件 - `profiles.json` - 配置文件列表 - `[自定义名称].json` - 其他配置文件 配置结构包括: - **schedule_settings**: 时间设置(课程时长、课间时长、预备提醒、学期开始日期、轮周偏差) - **event_sequences**: 事件序列预设 - **schedules**: 课程表数据 - **teachers**: 任课教师列表 - **countdowns**: 倒计日列表 - **window_settings**: 窗口设置(透明度、宽度、高度) - **system_settings**: 系统设置(自动隐藏策略、开机自启动) - **component_settings**: 组件显示设置(包括组件顺序、热搜最大长度) - **weather_settings**: 天气设置 - **duty_settings**: 值日设置(包括基准日期和基准序号) - **sound_settings**: 音效设置(预备铃、正铃、下课铃) - **automation_tasks**: 自动化任务列表 ## 注意事项 - 程序专为 Windows 平台设计 - 全屏检测功能在某些情况下需要管理员权限 - 天气 API 默认使用中文 - 界面和注释使用中文 - Fluent 风格设计 - 首次使用需要先创建事件序列和课程表 - 系统托盘图标可能需要手动显示(Windows 通知区域) ## 常见问题 ### Q: 托盘图标找不到? A: 检查 Windows 通知区域设置,确保允许课表系统显示图标 ### Q: 全屏检测不工作? A: 尝试以管理员权限运行程序 ### Q: 窗口不显示? A: 检查设置中的自动隐藏策略,或通过托盘图标手动显示 ### Q: 课程时间不准确? A: 在设置中调整课程时长和课间时长,然后重新创建事件序列 ### Q: 值日计算不准确? A: 设置正确的基准日期和基准序号,系统会基于基准值往后推算 ### Q: CECS 导出失败? A: 确保已添加任课教师或课程表中有课程数据 ### Q: 波浪提醒不显示? A: 在基本设置中设置预备提醒时间(>0分钟),确保距离上课前达到设定时间时会自动触发 ### Q: 如何切换配置文件? A: 进入"配置管理"页面,点击"切换配置"按钮选择不同的配置文件 ### Q: 如何创建新的配置文件? A: 在"配置管理"页面,点击"添加配置"按钮,输入配置名称即可创建新的配置文件 ### Q: 自动化任务不执行? A: 检查任务是否已启用,确认触发条件设置正确,查看控制台日志获取详细错误信息 ### Q: 如何创建课程名称触发器? A: 在自动化任务编辑器中添加触发器,选择"课程名称"类型,输入要触发的课程名称 ### Q: 音效不播放? A: 检查音效文件路径是否正确,确认音效文件格式支持(WAV、MP3、OGG),检查音量设置 ### Q: 如何设置音效? A: 进入"音效"设置页面,选择要配置的音效类型(预备铃、正铃、下课铃),勾选"启用",选择音效文件,调节音量,点击"试听"测试效果 ### Q: 倒计时窗口不显示? A: 倒计时窗口仅在上课期间显示,确认当前时间为上课时间段 ### Q: 如何调整热搜显示长度? A: 进入"组件"设置页面,在"热搜最大长度"SpinBox中调整显示的字符数(5-30个字符) ### Q: 倒计日显示"这里是倒计日组件"? A: 这表示没有配置倒计日,进入"倒计日"页面添加倒计日即可 ## 技术栈 - **语言**: Python 3.10+ - **GUI 框架**: PyQt6 - **Windows API**: pywin32 - **快捷方式管理**: winshell - **网络请求**: requests - **设计风格**: Microsoft Fluent Design ## 许可证 GPL-3.0 License 本项目采用 GNU General Public License version 3.0 许可证。您可以自由地使用、修改和分发本软件,但任何衍生作品也必须采用相同的许可证。 ## 致谢 - PyQt6 - Python GUI 框架 - 智教联盟 - CECS 通用课程表格式 - ClassIsland - 课程表软件参考 - Microsoft Fluent Design - UI 设计风格参考 ## 版本历史 ### v2.1 (2026-03-15) **新增功能:** - 🤖 自动化任务系统(可视化节点编辑器) - 支持5种触发器类型(每天、每周、每月、指定周次、课程名称) - 支持3种操作类型(终端执行、打开文件、打开网址) - 任务调度器自动检测触发条件并执行操作 **改进功能:** - 🔔 完善音效播放功能(预备铃、正铃、下课铃) - 📝 改进临时课表编辑器 - 📚 改进课程表编辑器 - 🧑‍🏫 改进任课教师管理 - ⚙️ 改进配置管理(导入后自动激活) - 🎯 改进课程窗口热搜组件(支持固定长度显示) - ⏱️ 改进倒计日组件(无配置时显示提示文本) - 🔧 设置窗口添加重启程序按钮 - 🐛 修复多个bug和优化用户体验 **技术优化:** - 优化事件切换检测逻辑 - 优化窗口显示/隐藏逻辑 - 改进配置文件刷新机制 - 支持无教师名称的课程配置 ### v2.0 (2026-03-07) **新增功能:** - 🌊 波浪提醒功能(上课预备铃全屏橙色波浪扩散效果) - 📂 多配置文件支持(Profiles) - 🧩 模块化设置界面(settings/ 目录) - 🎨 组件顺序自定义 - 📊 值日基准值功能(支持偏差修正) - 🔔 音效设置(预备铃、正铃、下课铃) - 📝 临时单日课表编辑器 - ⏱️ 倒计时窗口(上课期间显示课程结束倒计时) - 📢 通知窗口(用于显示预备铃和正铃提醒) - 📚 帮助中心(集成文档浏览) - 🧙 配置向导(首次使用引导) - 📄 CECS 通用课程表导出(兼容 ClassIsland) **架构改进:** - 采用模块化设计,将设置界面拆分为独立页面 - 配置文件自动刷新,无需重启即可应用更改 - 支持多配置文件管理和切换 ### v1.0 (2024-09-01) **初始版本:** - 基础课程表管理功能 - 事件序列编辑器 - 显示窗口 - 系统托盘图标 - 全屏检测 - 智能隐藏/显示