一个用于课堂/会议的随机点名小工具。程序内置简易 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
- 安装 Python 3.8+,确保
tkinter
可用(Windows 默认包含)。 - 生成内嵌资源(首次,以及每次修改
www/
后都需要执行):- PowerShell:
python .\script\pack_res.py
- CMD:
python script\pack_res.py
- PowerShell:
- 在项目根目录运行:
python main.py
- 桌面左上角会出现一个 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 }
GET /api/names
- 响应:JSON 数组,来自同目录
name_list.txt
- 示例:
["Alice", "Bob", "Charlie"]
- 响应:JSON 数组,来自同目录
- 前端
www/main.js
会在加载时请求该接口;当名单少于 2 人时,“开始点名”按钮会禁用。
- 注册表位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
- 键名:
RandomPicker
- 键值:
- 打包后:
"C:\\path\\to\\RandomPicker.exe"
- 源码运行:
"<python.exe>" "<path\\to\\main.py>"
- 打包后:
- 设置方式:
- 在托盘“设置”中勾选“开机自启动”,或
- 直接修改
config.json
中autostart
的值,重启程序后会同步注册表。
注意:某些企业策略可能限制写入该注册表路径。
打包前先生成内嵌资源 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
- 确保已安装
pystray
和pillow
打包后:
- 将
config.json
与(可选)name_list.txt
放在 EXE 同目录。 - 程序启动时会输出“静态资源:使用内嵌资源(res.py),共 N 个文件”。
- “开始点名”按钮是灰的/不可用?
- 名单人数需至少 2 人;请在同目录创建/导入
name_list.txt
。
- 名单人数需至少 2 人;请在同目录创建/导入
- 看不到系统托盘?
- 请确认已安装
pystray
、pillow
;或检查系统托盘图标是否被折叠隐藏。
- 请确认已安装
- 端口冲突(默认 5000)怎么办?
- 当前端口固定为 5000(不再从配置读取)。如需修改,请在
main.py
中调整SERVER_PORT
后重新运行/打包。
- 当前端口固定为 5000(不再从配置读取)。如需修改,请在
- 开机自启失败?
- 需要写入 HKCU 注册表,通常不需要管理员权限;若仍失败,可能被企业策略或安全软件限制。
- 打包后访问 404 或资源缺失?
- 确认已运行
python script/pack_res.py
生成res.py
;并检查打包命令是否包含--hidden-import res
。
- 确认已运行
- 许可证:MIT(见
LICENSE
文件) - Author: MeTerminator
QQ: 3532095196
Sponsored by whoopi