Python + PyQt5 实战:做一个公司抽奖小工具(支持导入花名册)
很多时候我们做活动抽奖,只需要一个简单、稳定、界面直观的小程序。这篇文章带你从 0 到 1,用 Python + PyQt5 写一个“公司抽奖工具”,并支持导入花名册(txt/csv/xlsx)。
欢迎大家关注此公众号,后台留言"python书籍"可免费获取【Python办公自动化高清PDF】电子书一本
此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅,也感谢大家支持,我才有更新的动力
我用夸克网盘给你分享了「分享-公司抽奖源代码版.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/~c15f3YRza0~:/
链接:https://pan.quark.cn/s/f356e88f63ff
一、效果和需求
先明确目标:
这个需求不复杂,但非常实用,适合拿来练手 GUI 和文件读取。
二、技术选型
- •
QTimer:定时刷新候选姓名,制造“滚动”效果 - •
csv / pathlib:读取和导出名单文件 - •
openpyxl(可选):读取 Excel 花名册
安装命令:
pip install pyqt5 openpyxl
三、核心实现思路
1)界面布局
主界面大致包含 4 块:
PyQt5 中用 QVBoxLayout 和 QHBoxLayout 组合即可。
2)导入花名册
通过 QFileDialog.getOpenFileName 选择文件,然后根据后缀读取:
最后做一次“去重并保持顺序”,避免名单重复。
3)滚动抽奖
用 QTimer 每 80ms 执行一次:
- • 从可抽名单里
random.choice(...) 选一个名字
点击“停止”后:
4)导出中奖名单
支持导出 csv 和 txt:
四、关键代码片段
启动滚动
defstart_lottery(self):ifnotself.available_names: QMessageBox.information(self, "提示", "当前没有可抽取人员,请先导入或重置。")returnself.timer.start()self.is_rolling = Trueself.start_btn.setEnabled(False)self.stop_btn.setEnabled(True)
滚动刷新
defroll_name(self):ifnotself.available_names:self.timer.stop()self.is_rolling = Falsereturnself.current_name = random.choice(self.available_names)self.name_label.setText(self.current_name)
停止并记录中奖
defstop_lottery(self):self.timer.stop()self.is_rolling = False winner = self.current_nameself.winners.append(winner)ifself.no_repeat_box.isChecked() and winner inself.available_names:self.available_names.remove(winner)
五、可继续升级的方向
如果你想做成“正式活动工具”,可以继续加:
六、总结
这个项目非常适合初学者练习:
代码不长,但非常贴近真实需求。如果你正在学习 Python 桌面应用,这个案例值得自己完整敲一遍。