Skip to content

trustedinster/classroom_lottery

Repository files navigation

课堂抽号程序

这是一个专为课堂教学设计的随机抽号程序,支持多种抽取模式和语音叫号功能,适用于Windows 7及以上操作系统。该程序采用PySide2构建图形界面,具有现代化的UI设计和稳定可靠的运行机制。

功能特性

1. 多种抽取模式

  • 全随机模式:完全随机抽取学生号码
  • 学生讲题模式(正序):按顺序从前往后抽取,确保每个学生都有机会
  • 学生讲题模式(倒序):按顺序从后往前抽取,提供更多样化的抽取方式
  • 优化随机模式:基于权重算法的智能抽号,防止连续点名和长期遗漏

2. 语音叫号功能

  • 支持中文语音播报抽取结果
  • 可自定义叫号文本模板
  • 兼容Windows 7及以上系统
  • 可开关语音功能

3. 灵活配置

  • 可设置号码范围(最小值、最大值)
  • 可调节动画延迟时间和结果显示时间
  • 支持通过图形界面或配置文件进行设置
  • 支持导入学生名单(CSV/XLSX格式)

4. 用户友好界面

  • 托盘图标常驻,方便随时调用
  • 全局快捷键触发抽号(Alt键)
  • 简洁明了的结果显示窗口
  • 支持Esc键快速关闭结果窗口

5. 程序稳定性

  • 守护进程保障,自动重启异常退出的主程序
  • 数据持久化,记录历史抽号统计
  • 日志记录便于问题排查

6. 更新与维护

  • 集成更新检查工具,支持自动下载更新
  • 支持PyInstaller和Nuitka两种打包方式
  • 镜像站下载加速

安装与使用

环境准备

确保系统已安装 Python 3.6+ 和必要的依赖库(见 requirements.txt)

启动器程序 (launcher.py)

启动器提供图形界面用于配置各项参数:

  • 编辑号码范围(最小值、最大值)
  • 设置动画延迟和结果显示时间
  • 选择抽取模式
  • 配置语音叫号功能
  • 导入学生名单(CSV/XLSX格式)
  • 选择并启动不同版本的主程序

主程序 (main.py)

主程序负责实际的抽号功能:

  • 通过快捷键(Alt)触发抽号
  • 显示抽号结果
  • 播放语音叫号(如果启用)
  • 支持三秒变动模式和直接显示模式

守护进程 (daemon.py)

守护进程用于保障主程序的稳定性:

  • 监控主程序运行状态
  • 自动重启异常退出的主程序
  • 限制重启次数防止无限重启

更新程序 (update.py)

更新程序提供便捷的版本管理:

  • 自动检查新版本
  • 支持从Gitee或GitHub下载更新
  • 可选择PyInstaller或Nuitka版本
  • 提供镜像站下载加速

学生名单管理

支持导入CSV或Excel文件格式的学生名单:

  • CSV文件应包含'学号'、'姓名'列
  • Excel文件第一列为学号,第二列为姓名
  • 抽号时显示学生姓名而非号码

配置说明

配置存储在 config.ini 文件中:

[lottery]
min_number = 1           # 最小号码
max_number = 48          # 最大号码
delay = 1                # 动画延迟(秒)
keep = 3                 # 结果保持时间(秒)
student_mode = 1         # 抽取模式(0=全随机,1=正序,2=倒序)
enable_voice = 0         # 是否启用语音叫号(0=关闭,1=开启)
voice_template = 请{}号同学回答问题  # 语音叫号模板

语音叫号定制

可以通过修改 voice_template 来定制叫号内容:

  • 使用 {} 作为号码占位符
  • 示例:
    • 请{}号同学起立
    • {}号同学请回答
    • 现在轮到第{}号同学

命令行参数

程序支持通过命令行参数覆盖配置文件中的设置:

  • --min-number: 设置最小号码
  • --max-number: 设置最大号码
  • --delay: 设置延迟秒数
  • --keep: 设置保持时间秒数
  • --student-mode: 设置抽取模式 (0=全随机, 1=正序, 2=倒序)
  • --enable-voice: 启用语音叫号 (0=关闭, 1=开启)
  • --voice-template: 设置语音叫号模板,使用{}作为号码占位符

系统要求

  • Windows 7 或更高版本
  • Python 3.6+
  • 依赖库详见 requirements.txt

技术特点

  • 使用 PySide2 构建现代化图形界面
  • 利用 Windows SAPI 实现 TTS 语音功能
  • 支持多版本程序管理
  • 日志记录便于问题排查
  • 兼容打包为 exe 文件运行
  • 优化随机算法防止连续点名和长期遗漏
  • 守护进程保障程序稳定性

使用方法

  1. 运行 launcher.py 启动配置界面
  2. 设置所需参数并保存,或导入学生名单
  3. 选择程序版本并启动主程序
  4. 在需要抽号时按下 Alt 键即可
  5. 可使用 update.py 检查并下载程序更新

文件说明

  • main.py: 主程序,实现抽号逻辑和UI界面
  • launcher.py: 启动器,提供图形界面配置
  • daemon.py: 守护进程,保障主程序稳定性
  • update.py: 更新程序,自动检查和下载更新
  • config.ini: 配置文件
  • students.json: 学生名单数据
  • lottery_data.pkl: 抽号统计数据
  • optimized_sampler_state.pkl: 优化抽样器状态数据
  • logs/: 日志文件目录

About

一个用Python编写的简单课堂抽号程序

Resources

License

Stars

Watchers

Forks

Packages

No packages published