当前位置:首页>python>Python + PyQt5 实战:做一个公司抽奖小工具(附源码)

Python + PyQt5 实战:做一个公司抽奖小工具(附源码)

  • 2026-10-11 08:09:35
Python + PyQt5 实战:做一个公司抽奖小工具(附源码)

Python + PyQt5 实战:做一个公司抽奖小工具(支持导入花名册)

很多时候我们做活动抽奖,只需要一个简单、稳定、界面直观的小程序。这篇文章带你从 0 到 1,用 Python + PyQt5 写一个“公司抽奖工具”,并支持导入花名册(txt/csv/xlsx)。

欢迎大家关注此公众号,后台留言"python书籍"可免费获取【Python办公自动化高清PDF】电子书一本

此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅,也感谢大家支持,我才有更新的动力

本工具的代码我也分享出来,希望大家多多支持

我用夸克网盘给你分享了「分享-公司抽奖源代码版.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。

/~c15f3YRza0~:/

链接:https://pan.quark.cn/s/f356e88f63ff

一、效果和需求

先明确目标:

  • • 能导入花名册
  • • 点击开始后,姓名快速滚动
  • • 点击停止后,定格中奖人
  • • 支持“中奖不重复”
  • • 中奖名单可导出

这个需求不复杂,但非常实用,适合拿来练手 GUI 和文件读取。

二、技术选型

  • • PyQt5:快速搭建桌面图形界面
  • • QTimer:定时刷新候选姓名,制造“滚动”效果
  • • csv / pathlib:读取和导出名单文件
  • • openpyxl(可选):读取 Excel 花名册

安装命令:

pip install pyqt5 openpyxl

三、核心实现思路

1)界面布局

主界面大致包含 4 块:

  • • 标题和当前滚动姓名显示区
  • • 状态区(总人数、可抽人数、当前状态)
  • • 操作区(导入、开始、停止、重置、导出等按钮)
  • • 列表区(花名册、中奖名单)

PyQt5 中用 QVBoxLayout 和 QHBoxLayout 组合即可。

2)导入花名册

通过 QFileDialog.getOpenFileName 选择文件,然后根据后缀读取:

  • • .txt:按行读取
  • • .csv:逐行逐列读取非空单元格
  • • .xlsx:读取活动工作表的非空单元格

最后做一次“去重并保持顺序”,避免名单重复。

3)滚动抽奖

用 QTimer 每 80ms 执行一次:

  • • 从可抽名单里 random.choice(...) 选一个名字
  • • 实时更新到大号 QLabel

点击“停止”后:

  • • 停止定时器
  • • 当前显示名记为中奖人
  • • 如果开启“不重复”,就从可抽名单移除该姓名

4)导出中奖名单

支持导出 csv 和 txt:

  • • txt:一行一个中奖人
  • • csv:输出“序号、姓名”两列,方便后续统计

四、关键代码片段

启动滚动

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)

五、可继续升级的方向

如果你想做成“正式活动工具”,可以继续加:

  • • 一次抽取多人(如一次 3 人)
  • • 分奖项抽取(一等奖、二等奖、三等奖)
  • • 指定部门抽奖
  • • 历史记录持久化(JSON / SQLite)
  • • 全屏模式与大屏展示主题

六、总结

这个项目非常适合初学者练习:

  • • GUI 事件绑定
  • • 定时器与状态管理
  • • 多格式文件导入
  • • 简单业务逻辑拆分

代码不长,但非常贴近真实需求。如果你正在学习 Python 桌面应用,这个案例值得自己完整敲一遍。

最新文章

随机文章