Skip to content

MeTerminator/RandomPicker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RandomPicker

一个用于课堂/会议的随机点名小工具。程序内置简易 HTTP 服务器提供前端页面(位于 www/),同时在桌面左上角显示一个 20x20 的悬浮按钮(“点”),点击即可在默认浏览器中打开页面。

  • 后端:Python 标准库(http.server + threading
  • 前端:内嵌于 res.py 的静态资源(由 www/ 打包生成)
  • GUI:tkinter 悬浮窗按钮 + 系统托盘(pystray
  • 支持 Windows 开机自启(注册表,当前用户)
  • 内嵌资源打包(无需 --add-data

功能特性

  • 简洁易用:双击运行/点按悬浮窗按钮即可打开页面。
  • 系统托盘:
    • 打开点名页面
    • 设置(开机自启动开关 + 导入名单)
    • 直接导入名单
    • 退出
  • 名单集中管理:name_list.txt 固定存放在 EXE 同目录(源码运行即脚本所在目录),一行一个名字。
  • 配置极简:config.json 仅支持 autostart(是否开机自启)。
  • 内嵌资源:无需随包携带 www/ 目录;更新前端需先运行打包脚本生成 res.py

目录结构

RandomPicker/
├─ main.py                  # 程序入口(内置 HTTP 服务 + 悬浮窗 + 托盘)
├─ www/                     # 前端静态资源源文件(打包脚本会读取)
│  ├─ index.html
│  ├─ main.js
│  └─ ...
├─ script/
│  └─ pack_res.py           # 将 www/ 打包为 res.py(gzip+base64)
├─ res.py                   # 由 pack_res.py 生成的内嵌资源(不要手动修改)
├─ name_list.txt            # 名单文件(可选,运行中可通过托盘导入/生成)
├─ config.json              # 配置文件(仅包含 autostart)
├─ README.md
└─ LICENSE (MIT)

运行环境

  • Windows(推荐)
  • Python 3.8+(源码运行)
  • 依赖:
    • pystray
    • pillow

安装依赖:

pip install pystray pillow

快速开始(源码运行)

  1. 安装 Python 3.8+,确保 tkinter 可用(Windows 默认包含)。
  2. 生成内嵌资源(首次,以及每次修改 www/ 后都需要执行):
    • PowerShell:python .\script\pack_res.py
    • CMD:python script\pack_res.py
  3. 在项目根目录运行:
    python main.py
  4. 桌面左上角会出现一个 20x20 的“点”悬浮按钮;点击或使用系统托盘菜单“打开点名页面”,访问 http://127.0.0.1:5000

名单与配置

  • 名单文件:name_list.txt
    • 路径:EXE(或脚本)同目录
    • 格式:UTF-8 文本,一行一个名字
    • 维护方式:
      • 通过“系统托盘 → 导入名单”选择一个 .txt 文件自动写入 name_list.txt
      • 或者手动在同目录创建/编辑 name_list.txt
  • 配置文件:config.json
    • 路径:EXE(或脚本)同目录
    • 仅支持一个字段:
      {
        "autostart": false
      }

内置 HTTP 接口

  • GET /api/names
    • 响应:JSON 数组,来自同目录 name_list.txt
    • 示例:
      ["Alice", "Bob", "Charlie"]
  • 前端 www/main.js 会在加载时请求该接口;当名单少于 2 人时,“开始点名”按钮会禁用。

Windows 开机自启说明

  • 注册表位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • 键名:RandomPicker
  • 键值:
    • 打包后:"C:\\path\\to\\RandomPicker.exe"
    • 源码运行:"<python.exe>" "<path\\to\\main.py>"
  • 设置方式:
    • 在托盘“设置”中勾选“开机自启动”,或
    • 直接修改 config.jsonautostart 的值,重启程序后会同步注册表。

注意:某些企业策略可能限制写入该注册表路径。

打包(PyInstaller)

打包前先生成内嵌资源 res.py

  • PowerShell:python .\script\pack_res.py

  • CMD:python script\pack_res.py

  • 单文件(onefile) + 隐藏控制台窗口:

    pyinstaller -F -w --name RandomPicker --hidden-import res main.py
  • 目录模式(onedir) + 隐藏控制台窗口:

    pyinstaller -w --name RandomPicker --hidden-import res main.py

可选:

  • 指定图标:在命令中加入 --icon RandomPicker.ico
  • 确保已安装 pystraypillow

打包后:

  • config.json 与(可选)name_list.txt 放在 EXE 同目录。
  • 程序启动时会输出“静态资源:使用内嵌资源(res.py),共 N 个文件”。

常见问题(FAQ)

  • “开始点名”按钮是灰的/不可用?
    • 名单人数需至少 2 人;请在同目录创建/导入 name_list.txt
  • 看不到系统托盘?
    • 请确认已安装 pystraypillow;或检查系统托盘图标是否被折叠隐藏。
  • 端口冲突(默认 5000)怎么办?
    • 当前端口固定为 5000(不再从配置读取)。如需修改,请在 main.py 中调整 SERVER_PORT 后重新运行/打包。
  • 开机自启失败?
    • 需要写入 HKCU 注册表,通常不需要管理员权限;若仍失败,可能被企业策略或安全软件限制。
  • 打包后访问 404 或资源缺失?
    • 确认已运行 python script/pack_res.py 生成 res.py;并检查打包命令是否包含 --hidden-import res

版权与许可

  • 许可证:MIT(见 LICENSE 文件)
  • Author: MeTerminator
    QQ: 3532095196

Sponsored by whoopi

About

课堂随机点名HTML

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages