日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python制作一個(gè)隨機(jī)抽獎(jiǎng)小工具的實(shí)現(xiàn)

瀏覽:150日期:2022-06-15 11:36:15
目錄1. 核心功能設(shè)計(jì)2. GUI設(shè)計(jì)與實(shí)現(xiàn)3. 功能實(shí)現(xiàn)3.1 讀取人員名單3.2. 隨機(jī)抽獎(jiǎng)3.3. 保存中獎(jiǎng)名單3.4. GUI交互邏輯

最近在工作中面向社群玩家組織了一場活動(dòng),需要進(jìn)行隨機(jī)抽獎(jiǎng),參考之前小明大佬的案例,再結(jié)合自己的需求,做了一個(gè)簡單的隨機(jī)抽獎(jiǎng)小工具。

今天我就來順便介紹一下這個(gè)小工具的制作過程吧!

先看效果:

Python制作一個(gè)隨機(jī)抽獎(jiǎng)小工具的實(shí)現(xiàn)

1. 核心功能設(shè)計(jì)

針對隨機(jī)抽獎(jiǎng)的小工具,需要可以導(dǎo)入?yún)⑴c抽獎(jiǎng)的人員名單,然后選擇不同的獎(jiǎng)勵(lì)類型進(jìn)行隨機(jī)抽取獲獎(jiǎng)名單并導(dǎo)出。

那么,簡單進(jìn)行需求拆解,大致梳理出以下核心功能:

名單導(dǎo)入

為了避免出現(xiàn)重名情況,這里我們約定以下幾點(diǎn):

①導(dǎo)入?yún)⑴c抽獎(jiǎng)的人員名單文件(xlsx類型文件)

②數(shù)據(jù)第一列為ID,第二列為name

參考格式案例

Python制作一個(gè)隨機(jī)抽獎(jiǎng)小工具的實(shí)現(xiàn)

獎(jiǎng)項(xiàng)類型選擇

獎(jiǎng)項(xiàng)類型是指一等獎(jiǎng)、二等獎(jiǎng)這類標(biāo)識語,這里我們內(nèi)置了特等獎(jiǎng)-六等獎(jiǎng)共7個(gè)選項(xiàng)供選取

本輪人數(shù)

本輪人數(shù)是指每次抽獎(jiǎng)時(shí)一次性抽取的獲獎(jiǎng)人數(shù),默認(rèn)值為5

①當(dāng)填入的數(shù)字超過剩余未獲獎(jiǎng)人數(shù)時(shí),會(huì)進(jìn)行提示并顯示未獲獎(jiǎng)人數(shù)

②當(dāng)填入的數(shù)字為0表示輪空,也需要手動(dòng)結(jié)束

③當(dāng)填入的數(shù)字為負(fù)數(shù)時(shí),點(diǎn)擊抽獎(jiǎng)無響應(yīng)

④當(dāng)填入的非數(shù)字時(shí),會(huì)進(jìn)行提示需要輸入正確數(shù)字

抽獎(jiǎng)時(shí)輪播區(qū)域

用于顯示抽獎(jiǎng)中隨機(jī)滾動(dòng)參與本輪抽獎(jiǎng)的人員名單

人員名單

當(dāng)選擇正確的人員名單文件后,這里會(huì)自動(dòng)顯示人員信息列表

中獎(jiǎng)記錄

記錄每次抽取的獎(jiǎng)項(xiàng)類型及獲獎(jiǎng)名單

開始抽獎(jiǎng)

①開始抽獎(jiǎng)時(shí),會(huì)先判斷抽獎(jiǎng)設(shè)置是否滿足條件,否則會(huì)有相關(guān)提示

②抽獎(jiǎng)中點(diǎn)擊開始抽獎(jiǎng)會(huì)提示正在抽獎(jiǎng)中

結(jié)束

①非抽獎(jiǎng)狀態(tài)下點(diǎn)擊結(jié)束無響應(yīng)

②抽獎(jiǎng)中點(diǎn)擊結(jié)束將顯示本次抽獎(jiǎng)結(jié)果

重置

①重置會(huì)清掉歷史抽獎(jiǎng)記錄(含本地文件,如有必要建議對中獎(jiǎng)名單留檔)

②抽獎(jiǎng)中點(diǎn)擊重置會(huì)提示正在抽獎(jiǎng)中

③非抽獎(jiǎng)狀態(tài)點(diǎn)擊重置會(huì)提示該操作會(huì)刪除歷史記錄,是否確認(rèn)

基本功能點(diǎn)確認(rèn)后,我們就開始進(jìn)行GUI設(shè)計(jì)。

2. GUI設(shè)計(jì)與實(shí)現(xiàn)

基于功能點(diǎn),我們用axure簡單進(jìn)行UI布局設(shè)計(jì),然后再通過GUI開發(fā)庫進(jìn)行設(shè)計(jì),這里依舊采用的是pysimplegui,主要是簡單方便。

Python制作一個(gè)隨機(jī)抽獎(jiǎng)小工具的實(shí)現(xiàn)

基于GUI設(shè)計(jì),我們編碼如下:

nameList_column = [ [sg.Text(’人員名單:’)], [sg.Listbox(values=[], size=(20, 10), key=’nameList’)],]result_column = [ [sg.Text(’中獎(jiǎng)記錄:’)], [sg.Multiline(’’, size=(48, 10), key=’result’, text_color=’DeepPink’)],]# 主題設(shè)置sg.theme(’SystemDefaultForReal’)# 布局設(shè)置layout = [[sg.Text(’選擇參與抽獎(jiǎng)人員名單文件:’, 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(’本輪獎(jiǎng)項(xiàng):’, font=(’微軟雅黑’, 12)), sg.Combo([’特等獎(jiǎng)’, ’一等獎(jiǎng)’, ’二等獎(jiǎng)’, ’三等獎(jiǎng)’, ’四等獎(jiǎng)’, ’五等獎(jiǎng)’, ’六等獎(jiǎng)’], font=(’微軟雅黑’, 10), default_value=’特等獎(jiǎng)’, size=(15, 5), key=’_type’), sg.Text(’本輪人數(shù):’, font=(’微軟雅黑’, 12)), sg.InputText(’5’, key=’_num’, size=(38, 1), font=(’微軟雅黑’, 10))], ], title=’抽獎(jiǎng)設(shè)置’, title_color=’red’, relief=sg.RELIEF_SUNKEN, tooltip=’請進(jìn)行抽獎(jiǎng)設(shè)置后再開始抽獎(jiǎng)’)], [sg.Multiline(size=(48, 5), font=( ’微軟雅黑’, 18), text_color=’Blue’, key=’luckyName’, justification=’center’)], [sg.Column(nameList_column), sg.Column(result_column)], [sg.Text(’操作說明:’, font=(’微軟雅黑’, 12))], [sg.Text(’①先選擇參與抽獎(jiǎng)的人員名單xlsx文件,人員名單文件包含ID和name兩個(gè)字段n②獲獎(jiǎng)名單將存在小工具所在文件夾,重置會(huì)刪除歷史記錄文件’, font=(’微軟雅黑’, 10)), sg.Text(’’, font=(’微軟雅黑’, 12), size=(5, 1)), sg.Button(’開始抽獎(jiǎng)’, font=(’微軟雅黑’, 12), button_color=’Orange’), sg.Button(’結(jié)束’, font=(’微軟雅黑’, 12), button_color=’red’), sg.Button(’重置’, font=(’微軟雅黑’, 12), button_color=’red’), ], ]# 創(chuàng)建窗口window = sg.Window(’抽獎(jiǎng)小工具,作者@微信公眾號:可以叫我才哥’, layout, font=(’微軟雅黑’, 12), default_element_size=(50, 1))

其包含的控件如下:

Text 文本 InputText 輸入文本框 FileBrowse 文件瀏覽 Multiline 多行文本框 Combo 下拉框 Listbox 列表 Button 按鈕

需要注意的是這里有個(gè)Frame組件,用于layout嵌套,可以很好地模塊化UI布局。

3. 功能實(shí)現(xiàn)

在本案例中,需要實(shí)現(xiàn)三個(gè)功能,分別是:讀取人員名單、隨機(jī)抽獎(jiǎng)以及保存中獎(jiǎng)名單。

3.1 讀取人員名單

這里采用的是openpyxl讀取表格數(shù)據(jù)并獲得某幾列的值,由于存在表頭,所以最后不需要表頭

def nameList(window): fileName = values[’_file’] try:wb = openpyxl.load_workbook(fileName)active_sheet = wb.activenames = [cell_object.value for cell_object in list(active_sheet.columns)[1]][1:]ids = [cell_object.value for cell_object in list(active_sheet.columns)[0]][1:]names = [name+’_’+str(id_) for name, id_ in zip(names, ids)]window[’nameList’].update(names)return names except:sg.popup(’請選擇正確格式的的人員名單文件’, title=’提示’,)3.2. 隨機(jī)抽獎(jiǎng)

由于我們需要一次隨機(jī)抽取的人數(shù)存在多個(gè),所以這里用的是random.sample(),需要注意的是傳入的參數(shù)中names是需要去掉已中獎(jiǎng)名單

def Result(window, names): global is_run, luckyNames _type = values[’_type’]# 本輪獎(jiǎng)項(xiàng)類型 _num = int(values[’_num’]) # 本輪人數(shù) while True:randomName = random.sample(names, k=_num)luckyName = ’ ’.join(randomName)window[’luckyName’].update(luckyName)if not is_run: headers = [’獎(jiǎng)項(xiàng)’, ’名單’] toCsv(headers, [_type]*len(randomName), randomName, lucky) luckyNames = luckyNames + _type+’ : ’+luckyName+’nn’ window[’result’].update(luckyNames) returntime.sleep(0.088)3.3. 保存中獎(jiǎng)名單

這里我們用的是csv庫的方法,追加存儲

def toCsv(headers, col1, col2, file): # 存在則追加,不存在則新建 if os.path.exists(lucky):with open(lucky, ’a’, encoding=’utf_8_sig’, newline=’’) as csvfile: writer = csv.writer(csvfile) writer.writerows(zip(col1, col2)) else:with open(lucky, ’w’, encoding=’utf_8_sig’, newline=’’) as csvfile: writer = csv.writer(csvfile) writer.writerow(headers) writer.writerows(zip(col1, col2))

完成核心功能函數(shù)后,我們再進(jìn)行GUI交互邏輯的實(shí)現(xiàn)。

3.4. GUI交互邏輯

這里有兩個(gè)全局變量,其中一個(gè)用于記錄當(dāng)前抽獎(jiǎng)狀態(tài),另外一個(gè)用于存儲當(dāng)前已經(jīng)獲獎(jiǎng)的人員信息。關(guān)于交互邏輯的詳情,大家可以結(jié)合核心功能需求及以下代碼了解。

# 初始狀態(tài)is_run = FalseluckyNames = ’’# 事件循環(huán)while True: event, values = window.read() if event in (None, ’關(guān)閉程序’):break if event == ’_file’:nameList(window) if event == ’開始抽獎(jiǎng)’:if is_run: sg.popup(’抽獎(jiǎng)進(jìn)行中,無需重復(fù)操作......’, title=’提示’) continuetry: names = nameList(window) # 人員名單 _num = int(values[’_num’]) # 本輪人數(shù) lucky = ’中獎(jiǎng)名單.csv’ # 中獎(jiǎng)名單 if os.path.exists(lucky):with open(’中獎(jiǎng)名單.csv’, ’r’, encoding=’utf_8_sig’) as f: reader = csv.reader(f) selectedNames = set([i[1] for i in reader][1:])names_set = set(names)-selectedNames else:names_set = set(names) if len(names_set) >= _num:is_run = True_thread.start_new_thread(Result, (window, names_set)) else:sg.popup( f’請選擇正確本輪抽獎(jiǎng)人數(shù)(當(dāng)前 {len(names_set)} 個(gè)未中獎(jiǎng)人數(shù))’, title=’提示’)except: sg.popup(’請選擇正確本輪抽獎(jiǎng)人數(shù)(別超過總?cè)藬?shù)哦)’, title=’提示’) elif event == ’結(jié)束’:is_run = False elif event == ’重置’:if is_run: sg.popup(’抽獎(jiǎng)進(jìn)行中,請等待抽獎(jiǎng)結(jié)束后重置...’, title=’提示’) continueyes_no = sg.popup_yes_no( ’重置會(huì)清楚歷史數(shù)據(jù),是否執(zhí)行此操作??’, text_color=’red’, title=’提示’)if yes_no == ’Yes’: try:os.remove(lucky)luckyNames = ’’window[’result’].update(luckyNames)window[’luckyName’].update(luckyNames)sg.popup(’抽獎(jiǎng)歷史記錄已被重置......’, title=’提示’) except:sg.popup(’無抽獎(jiǎng)歷史記錄......’, title=’提示’)window.close()

基于此,我們就完成了隨機(jī)抽獎(jiǎng)小工具的制作。

啟動(dòng)頁如下:

Python制作一個(gè)隨機(jī)抽獎(jiǎng)小工具的實(shí)現(xiàn)

最后,大家感興趣就可以將代碼打包成exe可執(zhí)行文件了,我這邊打包下來大概10MB左右大小。

到此這篇關(guān)于Python制作一個(gè)隨機(jī)抽獎(jiǎng)小工具的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 隨機(jī)抽獎(jiǎng)小工具內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本少妇精品亚洲第一区| 国产精品精品国产一区二区| 97人人精品| 精品国产网站| 国产综合色区在线观看| 精品国模一区二区三区| 99成人在线视频| 国产视频一区三区| 影音先锋国产精品| 伊人成人在线视频| 天使萌一区二区三区免费观看| 国产亚洲毛片在线| 免费在线看一区| 国产精品入口久久| 欧美二三四区| 日韩精品一级中文字幕精品视频免费观看 | 久久国产88| 亚洲+小说+欧美+激情+另类| 中文字幕日韩欧美精品高清在线| 91成人精品观看| 久久久久久久欧美精品| 国产精品久久久久久久久久妞妞 | 三级久久三级久久久| 国产午夜一区| 久久国产毛片| 日韩黄色在线观看| 蜜桃av.网站在线观看| 视频一区视频二区中文| 奇米亚洲欧美| 国产欧洲在线| 亚洲午夜久久| 中文字幕成在线观看| 中文亚洲免费| 老牛国内精品亚洲成av人片| 黄色在线一区| 国产一区二区三区四区五区| 午夜在线视频观看日韩17c| 国产精品色婷婷在线观看| 亚洲国产专区| 国产亚洲精品精品国产亚洲综合| 久久三级福利| 国产精品1区在线| 国产精品日韩欧美一区| 国产免费av一区二区三区| 亚洲一本视频| 久久精品色播| 日本不卡视频在线观看| 久久精品国产www456c0m| 国产欧美高清| 亚洲理论在线| 日韩欧美一区二区三区免费看| 日韩精品福利一区二区三区| 欧美日韩色图| 精品日韩一区| 亚洲欧美一级| 欧美日韩激情| 伊伊综合在线| 国产精品一二| 在线亚洲免费| 成人小电影网站| 免费观看在线色综合| 三级小说欧洲区亚洲区| 久久久国产精品网站| 自拍自偷一区二区三区| 久久精品免费一区二区三区 | 特黄毛片在线观看| 国产亚洲高清在线观看| 久久麻豆精品| 久久婷婷国产| 欧美日韩91| 三级一区在线视频先锋| 亚洲一级少妇| 精品亚洲二区| 日韩精品1区2区3区| 99精品美女| 精品久久久亚洲| 日韩精品免费一区二区夜夜嗨| 欧美成人基地 | 久久精品国产99国产| 蜜臀va亚洲va欧美va天堂| 成人日韩在线观看| 精品国产91| 牛牛精品成人免费视频| 日本国产欧美| 天海翼亚洲一区二区三区| 一区免费在线| 亚洲二区三区不卡| 日本韩国欧美超级黄在线观看| 精品精品国产三级a∨在线| 国产精品99久久免费| 日韩专区视频网站| 久久成人一区| 在线亚洲观看| 黄色精品网站| 在线一区欧美| 奶水喷射视频一区| 伊人久久大香线蕉av超碰演员| 性感美女一区二区在线观看| 成人午夜在线| 久久中文字幕导航| 欧美激情精品| 精品美女在线视频| 四虎成人av| 综合日韩av| 美女视频黄免费的久久| 日韩精品乱码av一区二区| 亚洲精选久久| 少妇高潮一区二区三区99| 日本亚洲欧洲无免费码在线| 天海翼亚洲一区二区三区| 日本久久二区| 国产精品亚洲片在线播放| 国产精品久久久久77777丨| 欧美激情视频一区二区三区免费| 国产精品任我爽爆在线播放| 国产精品久久久久久久久久白浆 | 视频一区免费在线观看| 在线看片日韩| 久久成人精品| 日韩黄色在线观看| 国产精品久久久久久妇女| 国产精品视频一区二区三区四蜜臂| 国产精品一区高清| 欧美成人aaa| 97精品在线| 亚洲精品一区二区妖精| 99re国产精品| 日韩精品欧美成人高清一区二区| 国产精品久久久一区二区| 视频在线不卡免费观看| 欧美不卡在线| 亚州国产精品| 精品免费av一区二区三区| 成人一二三区| 在线视频亚洲| 国产日韩免费| 日韩电影免费网站| 性欧美长视频| 日韩免费久久| 蜜臀精品一区二区三区在线观看| 国产区精品区| 日本欧美不卡| 日韩在线观看中文字幕| 韩日一区二区| 日韩一级不卡| 国产精品2区| 欧美综合另类| 91精品国产一区二区在线观看| 国产精品s色| 日韩在线综合| 日韩高清不卡在线| 电影亚洲精品噜噜在线观看| 99视频+国产日韩欧美| 久久国产欧美日韩精品| 日韩精品dvd| 一级成人国产| sm捆绑调教国产免费网站在线观看 | 国模 一区 二区 三区| 女人天堂亚洲aⅴ在线观看| 日韩av一二三| 久久精品欧美一区| 日韩和欧美的一区| 色婷婷久久久| 91亚洲无吗| 国产精品99一区二区| 久久精品凹凸全集| 黄色av日韩| 91一区二区三区四区| 亚洲精品亚洲人成在线观看| 成人精品久久| 日韩超碰人人爽人人做人人添| 精精国产xxxx视频在线播放| 国产探花一区在线观看| 成人日韩在线观看| 国产精品流白浆在线观看| 亚洲激情av| 国产不卡人人| 国产欧美欧美| 视频在线观看国产精品| 日韩不卡免费高清视频| 国产精品久久久久久妇女| 免费日本视频一区| 精品日韩视频| 卡一卡二国产精品| 日韩精品中文字幕吗一区二区| 欧美日一区二区| 精品久久影院| 欧美精品第一区| 日韩精品一级中文字幕精品视频免费观看 | 日本 国产 欧美色综合| 久久国产成人午夜av影院宅| 欧美国产先锋| 日韩成人午夜精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精品九九| 亚洲一区av| 亚洲自拍另类| 亚洲成人精选| 久久美女精品| 亚洲v在线看|