最近在工作中面向社群玩家组织了一场活动,需要进行随机抽奖,参考之前小明大佬的案例,再结合自己的需求,做了一个简单的随机抽奖小工具。
今天我就来顺便介绍一下这个小工具的制作过程吧!
1. 核心功能设计
针对随机抽奖的小工具,需要可以导入参与抽奖的人员名单,然后选择不同的奖励类型进行随机抽取获奖名单并导出。
那么,简单进行需求拆解,大致梳理出以下核心功能:
•名单导入
为了避免出现重名情况,这里我们约定以下几点:
①导入参与抽奖的人员名单文件(xlsx类型文件)
②数据第一列为ID,第二列为name
参考格式案例
•奖项类型选择
奖项类型是指一等奖、二等奖这类标识语,这里我们内置了特等奖-六等奖共7个选项供选取
•本轮人数
本轮人数是指每次抽奖时一次性抽取的获奖人数,默认值为5
①当填入的数字超过剩余未获奖人数时,会进行提示并显示未获奖人数
②当填入的数字为0表示轮空,也需要手动结束
③当填入的数字为负数时,点击抽奖无响应
④当填入的非数字时,会进行提示需要输入正确数字
•抽奖时轮播区域
用于显示抽奖中随机滚动参与本轮抽奖的人员名单
•人员名单
当选择正确的人员名单文件后,这里会自动显示人员信息列表
•中奖记录
记录每次抽取的奖项类型及获奖名单
•开始抽奖
①开始抽奖时,会先判断抽奖设置是否满足条件,否则会有相关提示
②抽奖中点击开始抽奖会提示正在抽奖中
•结束
①非抽奖状态下点击结束无响应
②抽奖中点击结束将显示本次抽奖结果
•重置
①重置会清掉历史抽奖记录(含本地文件,如有必要建议对中奖名单留档)
②抽奖中点击重置会提示正在抽奖中
③非抽奖状态点击重置会提示该操作会删除历史记录,是否确认
基本功能点确认后,我们就开始进行GUI设计。
2. GUI设计与实现
基于功能点,我们用axure简单进行UI布局设计,然后再通过GUI开发库进行设计,这里依旧采用的是pysimplegui,主要是简单方
便。
Python学习交流Q群:906715085###
UI布局设计-axure
基于GUI设计,我们编码如下:
nameList_column = [
[sg.Text('人员名单:')],
[sg.Listbox(values=[], size=(20, 10), key='nameList')],
]
result_column = [
[sg.Text('中奖记录:')],
[sg.Multiline('', size=(48, 10), key='result', text_color='DeepPink')],
]
# 主题设置
sg.theme('SystemDefaultForReal')
# 布局设置
layout = [[sg.Text('选择参与抽奖人员名单文件:', font=('微软雅黑', 12)), sg.InputText('', key='_file', size=(50, 1), font=('微软雅黑', 10), enable_events=True), sg.FileBrowse('打开', file_types=(('Text Files', '*.xlsx'),), size=(10, 1), font=('微软雅黑', 11))],
[sg.Frame(layout=[
[sg.Text('本轮奖项:', font=('微软雅黑'