# class_form **Repository Path**: cup11/class_form ## Basic Information - **Project Name**: class_form - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-14 - **Last Updated**: 2023-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 灵动课表 > 注:此课表为重构版,未经长时间严格测试,**很可能存在漏洞。尽量不要连续操作(尤其是动画时)。** > 请谅解,有条件可报告至 ## 使用方法 1. 如果是第一次使用,编辑 `config.json`,主要更改`"日程表"`、`"课程时间"`字段。 2. 点击`class_form.exe`(或者配置 Python 环境后运行 `pythonw class_form.py`,即可运行。 3. 关闭程序:双击“关闭”后弹窗点击确认,或者借助任务管理器关闭占用内存大的那个任务。 ## 注意事项 1. 关于配置文件,详见“[配置文件解释](#配置文件解释)”,严格按照要求编辑。 2. 不保证程序在**连续**运行**一周**后正常运行。日志文件在程序目录同级的`logs`中。 3. 主窗口右侧四个按钮均需双击才能运行。 4. 第二窗口(黄字)上的数字均表示时间,单位为**分钟**。一般表示“剩余时间/总时间”。 5. “隐藏”表示从下课**暂时回到上课状态**一段时间,将窗口取消置顶。注意,最多延长至下一节课预备铃。点击其他软件界面即可将课表覆盖至下方。若无法覆盖,尝试点击一次课表再点击别处即可。 6. “上课”表示从下课或预备铃期间**直接进入下一节课**,将窗口取消置顶。覆盖至下方方法同上。 7. “换课”进入专门窗口,右侧“分隔”表示在这一节课下课后是否有分隔符;其余见[配置文件解释-日程表](#日程表)。 8. “关闭”指关闭整个程序,如果只是想暂时隐藏可选择“隐藏”或“上课”。 9. 双击“周x”的标签可以更换当日课表,用于应付调休。 ## 配置文件解释 > 请按照 json 格式编辑。 > > 配置文件默认为 `config.json`, > 但更新有可能会将其覆盖,建议复制一份保存为`config_custom.json`。 > 如遇到特殊情况,可复制一份命名为`config_special.json`后修改。 > > 读取时,优先读取`config_special.json`,如找不到再尝试读取`config_custom.json`,找不到再尝试`config.json`。 ### 日程表 - 键表示星期几(1~7),值表示当日课程安排。 - 请保证**1~7 均有对应的列表**,课程安排中均**至少有 1 个课程**(星期六、日如果没课,随意填写即可,不要空着)。 - 请保证课程安排中的**非分隔符数不超过[课程时间](#课程时间)中的列表长度** - 课程安排建议每项一个字符。 - 如果字符为[分隔符](#分隔符),则不计入正式课程,只是便于排版。 - 如果字符为 `~` ,则表示与**下一堂课**连堂(可连续使用),中途不进行上下课。注意连堂之间不要添加分隔符,且保证它**后面跟着有效课程名称**。将它与“课程时间”合理拆分合并,理论上实现全部课表。 ### 课程时间 - 格式为两个时间点中间用 `-` 连接;每个时间点用 `hh:mm` 或 `h:mm` 格式。例:`09:20-10:00`、`7:30-8:00`。 - 请保证列表长度不能少于每日课程安排的非分隔符数。 ### 分隔符 - 用于分隔星期与课程区、课程区与功能区,以及较长间隔的课程群。 - 一般在[日程表](#日程表)中表示**早操、午餐、晚餐**的时间。 - 注意,第一节课前和最后一节课后均**不加分隔符**。 ### 屏幕布局 - 单位均为像素。请保证均为**非负整数**。 - “窗口上方”表示窗口距离屏幕上边缘的距离。主要为了便于窗口关闭等操作,不挡住操作栏。 - “窗口间隔”指提示窗口和主窗口之间的间隔。注:窗口摆放位置按照两窗口两侧距离相等、之间等于窗口间隔的原则,放不下时都靠边,可能发生重叠。 - “窗口内上下”“窗口内左右”指窗口内的内边距。 ### 其他 1. 自主课程:对于一般的课程,为了保证听课效率,不会实时显示剩余时间。而在此列表中的课程上课也会像下课一样显示剩余时间。 2. 预备铃(单位:分钟)。应用于所有课程。 3. 暂时隐藏时间(单位:分钟)。点击“隐藏”时延长上一次课程的时间。 4. 透明度(0.0~1.0):主窗口和提示窗口的透明度。 5. 侦测频率(单位:Hz):每秒钟检测屏幕的次数。调高可使点击事件的响应速度变快,调低可使CPU占用降低(注:一次侦测一般只占用 `0.8ms`,不需过度担心CPU占用。 6. 字体:课表大字的字体。功能区按钮按照 `0.4` 倍,编辑窗口按钮按照 `0.5` 倍大小。如果有人看不清课表,建议放大字体;如果两窗口发生重叠,建议缩小字体。 7. 颜色主题:调整文字、背景颜色。请保证**用 `hex` 方式,即`#`+6位十六进制数表示**(例:`#FFFF00` 黄色)。 ## 特色介绍 ### 高度可定制化 - [x] 自己的课表仅需在配置文件中修改 - [x] (Since 0.0) 支持课程连堂(`~`),应对特殊安排 - [x] (Since 0.0) 支持统一定义预备铃时间 - [x] (Since 0.0) 支持自定义透明度、刷新率、侦测频率 - [x] (Since 0.0) 支持自定义颜色主题 - [x] (Since 0.1) 支持自定义屏幕布局 - [x] (Changed in 0.0) 支持变长课表 - [x] (Changed in 0.0) 可定制任意时间的课表 - [x] (Changed in 0.2) 支持换课,有独立编辑窗口 - [x] 支持调休 ### 课表显示美观 - [x] 上课时间窗口不置顶,不妨碍写字 - [x] 不会出现在任务栏,不影响观感 - [x] 支持用分隔符划分课表(如早操、午饭、晚饭等) - [x] (Changed in 0.0) 窗口动画,变化不生硬 - [x] (Since 0.0) 调度算法使得动画和日常侦测更加连续 - [x] (Changed in 0.1) 窗口动画时间根据重要性不同可调节 - [x] (Since 0.0) 下课时前后两节课颜色逐渐变化 - [x] (Since 0.1) 程序有专门图标 ### 传达信息充足 - [x] 上下课准时提醒 - [x] (Since 0.1) 预备铃响铃提醒 - [x] (Since 0.0) 支持下课后暂时隐藏课表或提前上课 - [x] (Since 0.0) 自习课和下课提醒剩余时间 ### 代码结构清晰 - [x] 风格清爽 - [x] 具有一定的设计模式 - [x] 易于重构 - [x] 日志功能较完善 ## 致谢 原版: - [@DuguSand](https://github.com/DuguSand):[class_form](https://github.com/DuguSand/class_form) 图标: - [build/favicon.ico by Freepik](https://www.freepik.com/icon/timetable_1048953")