下周我们公司的圣诞 Party 活动安排有抽奖环节,由于不方便采用手机抽奖,且目前选用的电脑端在线抽奖会出现卡顿情况,最近我就尝试着用 Python 实现抽奖功能。目前进展不错,也想分享给大家,由于涉及隐私嘛,做了番保密修改,将要展示的抽奖公司搬到了水泊梁山,助力 108 好汉进行抽奖。
人家需不需要呢咱也不敢问,反正抽奖程序是做好了,请大家过目:
运行前准备好参与抽奖的好汉名单,本程序会自动读取表格文件,将待抽奖的各位好汉展示在左侧奖池中,只要点击图中小鹿的红鼻子,会默认抽取三等奖(共十位)。
文章结尾附有完整版细节视频。可以看到,抽奖时好汉名字会在中央滚动展示,当再次点击红鼻子完成单次抽奖时,中奖的名字会从左侧奖池转移到右侧获奖榜上。
一、二等奖分别五位,与三等奖抽取的区别在于要先选择右侧 1 号金色或 2 号银色标志,根据点选标志抽取相应奖项。
当然,如果三等奖未完成,也可以点选 1 号金标 或 2 号银标 先行抽取,之后再通过点 3 号铜标 完成三等奖的抽取。在获奖榜满额时,再次抽奖会触发弹框提醒。
此外,左下方的 "Let's go!" 字样是重置开关,点击会重新载入数据进行抽奖。
当然,除了鼠标点击事件的控制,该抽奖程序也添加了键盘控制:例如数字键可以直接选择奖项,空格键等同于红鼻子控制,Esc 键退出抽奖等。
如上便是目前抽奖程序的功能和界面了,下面分享下我在设计与编码过程中的路线和想法。
需求与设计
首先归纳下整个抽奖程序的需求:
基本功能是实现名单中的随机抽取
活动穿插三轮抽奖,不能重复中奖
尽量美观
打消暗箱操作的怀疑
基于总结的需求点,我整理的设计方案如下:
名单自动载入至列表中
随机抽取名单列表,抽中后移除该元素
图形界面展现抽奖过程和结果,选用 tkinter 来实现
绑定鼠标、键盘控制抽奖过程
滚动随机数
首先搜索 “Python 抽奖程序”,在众多素材中看到了一份可以 tkinter 界面动态展示随机数的代码。拷贝过来运行,效果如图: