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

您的位置:首頁技術文章
文章詳情頁

Python制作一個隨機抽獎小工具的實現

瀏覽:148日期:2022-06-15 11:36:15
目錄1. 核心功能設計2. GUI設計與實現3. 功能實現3.1 讀取人員名單3.2. 隨機抽獎3.3. 保存中獎名單3.4. GUI交互邏輯

最近在工作中面向社群玩家組織了一場活動,需要進行隨機抽獎,參考之前小明大佬的案例,再結合自己的需求,做了一個簡單的隨機抽獎小工具。

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

先看效果:

Python制作一個隨機抽獎小工具的實現

1. 核心功能設計

針對隨機抽獎的小工具,需要可以導入參與抽獎的人員名單,然后選擇不同的獎勵類型進行隨機抽取獲獎名單并導出。

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

名單導入

為了避免出現重名情況,這里我們約定以下幾點:

①導入參與抽獎的人員名單文件(xlsx類型文件)

②數據第一列為ID,第二列為name

參考格式案例

Python制作一個隨機抽獎小工具的實現

獎項類型選擇

獎項類型是指一等獎、二等獎這類標識語,這里我們內置了特等獎-六等獎共7個選項供選取

本輪人數

本輪人數是指每次抽獎時一次性抽取的獲獎人數,默認值為5

①當填入的數字超過剩余未獲獎人數時,會進行提示并顯示未獲獎人數

②當填入的數字為0表示輪空,也需要手動結束

③當填入的數字為負數時,點擊抽獎無響應

④當填入的非數字時,會進行提示需要輸入正確數字

抽獎時輪播區域

用于顯示抽獎中隨機滾動參與本輪抽獎的人員名單

人員名單

當選擇正確的人員名單文件后,這里會自動顯示人員信息列表

中獎記錄

記錄每次抽取的獎項類型及獲獎名單

開始抽獎

①開始抽獎時,會先判斷抽獎設置是否滿足條件,否則會有相關提示

②抽獎中點擊開始抽獎會提示正在抽獎中

結束

①非抽獎狀態下點擊結束無響應

②抽獎中點擊結束將顯示本次抽獎結果

重置

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

②抽獎中點擊重置會提示正在抽獎中

③非抽獎狀態點擊重置會提示該操作會刪除歷史記錄,是否確認

基本功能點確認后,我們就開始進行GUI設計。

2. GUI設計與實現

基于功能點,我們用axure簡單進行UI布局設計,然后再通過GUI開發庫進行設計,這里依舊采用的是pysimplegui,主要是簡單方便。

Python制作一個隨機抽獎小工具的實現

基于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=(’微軟雅黑’, 12)), sg.Combo([’特等獎’, ’一等獎’, ’二等獎’, ’三等獎’, ’四等獎’, ’五等獎’, ’六等獎’], font=(’微軟雅黑’, 10), default_value=’特等獎’, size=(15, 5), key=’_type’), sg.Text(’本輪人數:’, font=(’微軟雅黑’, 12)), sg.InputText(’5’, key=’_num’, size=(38, 1), font=(’微軟雅黑’, 10))], ], title=’抽獎設置’, title_color=’red’, relief=sg.RELIEF_SUNKEN, tooltip=’請進行抽獎設置后再開始抽獎’)], [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(’①先選擇參與抽獎的人員名單xlsx文件,人員名單文件包含ID和name兩個字段n②獲獎名單將存在小工具所在文件夾,重置會刪除歷史記錄文件’, font=(’微軟雅黑’, 10)), sg.Text(’’, font=(’微軟雅黑’, 12), size=(5, 1)), sg.Button(’開始抽獎’, font=(’微軟雅黑’, 12), button_color=’Orange’), sg.Button(’結束’, font=(’微軟雅黑’, 12), button_color=’red’), sg.Button(’重置’, font=(’微軟雅黑’, 12), button_color=’red’), ], ]# 創建窗口window = sg.Window(’抽獎小工具,作者@微信公眾號:可以叫我才哥’, layout, font=(’微軟雅黑’, 12), default_element_size=(50, 1))

其包含的控件如下:

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

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

3. 功能實現

在本案例中,需要實現三個功能,分別是:讀取人員名單、隨機抽獎以及保存中獎名單。

3.1 讀取人員名單

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

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. 隨機抽獎

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

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

這里我們用的是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))

完成核心功能函數后,我們再進行GUI交互邏輯的實現。

3.4. GUI交互邏輯

這里有兩個全局變量,其中一個用于記錄當前抽獎狀態,另外一個用于存儲當前已經獲獎的人員信息。關于交互邏輯的詳情,大家可以結合核心功能需求及以下代碼了解。

# 初始狀態is_run = FalseluckyNames = ’’# 事件循環while True: event, values = window.read() if event in (None, ’關閉程序’):break if event == ’_file’:nameList(window) if event == ’開始抽獎’:if is_run: sg.popup(’抽獎進行中,無需重復操作......’, title=’提示’) continuetry: names = nameList(window) # 人員名單 _num = int(values[’_num’]) # 本輪人數 lucky = ’中獎名單.csv’ # 中獎名單 if os.path.exists(lucky):with open(’中獎名單.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’請選擇正確本輪抽獎人數(當前 {len(names_set)} 個未中獎人數)’, title=’提示’)except: sg.popup(’請選擇正確本輪抽獎人數(別超過總人數哦)’, title=’提示’) elif event == ’結束’:is_run = False elif event == ’重置’:if is_run: sg.popup(’抽獎進行中,請等待抽獎結束后重置...’, title=’提示’) continueyes_no = sg.popup_yes_no( ’重置會清楚歷史數據,是否執行此操作??’, text_color=’red’, title=’提示’)if yes_no == ’Yes’: try:os.remove(lucky)luckyNames = ’’window[’result’].update(luckyNames)window[’luckyName’].update(luckyNames)sg.popup(’抽獎歷史記錄已被重置......’, title=’提示’) except:sg.popup(’無抽獎歷史記錄......’, title=’提示’)window.close()

基于此,我們就完成了隨機抽獎小工具的制作。

啟動頁如下:

Python制作一個隨機抽獎小工具的實現

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

到此這篇關于Python制作一個隨機抽獎小工具的實現的文章就介紹到這了,更多相關Python 隨機抽獎小工具內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产免费| 日韩精品欧美| 久久亚洲国产精品一区二区| 日韩在线不卡| 国产极品模特精品一二| 欧美精品91| 色综合五月天| 日本精品黄色| 日韩在线免费| 欧美精品一线| 亚洲精品成人一区| 日韩精品第二页| 国产欧美久久一区二区三区| 国产精品久久久久久久久久久久久久久| 国产精品欧美一区二区三区不卡| 麻豆视频久久| 亚洲综合在线电影| 狠狠干综合网| 日本不卡一二三区黄网| 视频一区二区国产| 国产欧美精品| 91视频一区| 国产综合精品一区| 综合激情网...| 欧美精品91| 久久久久久美女精品| 丝袜a∨在线一区二区三区不卡| 蜜臀久久久久久久| 免费一区二区三区在线视频| 日韩久久一区二区三区| 黄色精品网站| 国产日产一区| 久久影院午夜精品| 久久亚洲不卡| 国产精品嫩模av在线| 日韩黄色大片| 视频在线观看91| 国产极品一区| 午夜久久美女| 嫩呦国产一区二区三区av| 99久久www免费| 青草av.久久免费一区| 欧美不卡高清一区二区三区| 在线精品观看| 欧美男人天堂| 综合激情视频| 国精品产品一区| 日韩一区二区免费看| 欧美日本一区| 色天使综合视频| 日韩精品一页| 久久久水蜜桃av免费网站| 亚洲精品无播放器在线播放| 国产成人1区| 免费精品视频在线| 裤袜国产欧美精品一区| 亚洲精品动态| 日韩理论视频| 欧美一区在线观看视频| 欧美va天堂在线| 麻豆国产欧美日韩综合精品二区| 美女毛片一区二区三区四区| 国产精品a久久久久| 欧美日韩国产一区精品一区| 国产精品亚洲欧美日韩一区在线 | 首页亚洲欧美制服丝腿| 国产精品麻豆成人av电影艾秋| 婷婷成人在线| 国产精品一区二区三区美女 | 人人精品亚洲| 国产情侣一区| 老牛影视一区二区三区| а√在线中文在线新版| 天堂久久一区| 欧美日韩在线观看视频小说| 欧美中文一区| 亚洲激情av| 欧美日韩国产v| 国产精品伦一区二区| 一区二区不卡| 狠狠色综合网| 亚洲人成在线网站| 国产美女精品视频免费播放软件| 亚洲激情另类| 欧美黄色网页| 精品一区二区三区四区五区| 在线国产精品一区| 亚洲精品2区| 在线天堂中文资源最新版| 日韩精品欧美大片| 视频一区视频二区中文字幕| 米奇777超碰欧美日韩亚洲| 精品精品国产三级a∨在线| 日本亚洲三级在线| 香蕉成人久久| 欧美在线影院| 亚洲国产专区| 日本在线啊啊| 四虎成人av| 成人午夜毛片| 九九久久国产| 欧美成人精品一级| 日韩中文字幕| 国产精品久久久久久久久久久久久久久| 综合欧美亚洲| 国产一区白浆| 免费美女久久99| 欧美日韩国产在线一区| 久久伦理在线| 欧美日韩一区二区综合| 免费久久99精品国产| 中文一区在线| 亚洲激情黄色| 国产一区91| 亚洲激情中文在线| 欧美福利专区| 在线一区免费| 亚洲欧美日本视频在线观看| 91久久久久| 在线 亚洲欧美在线综合一区| 视频福利一区| 欧美日韩黑人| 国产模特精品视频久久久久| 亚洲综合另类| 香蕉久久夜色精品国产| 国产午夜精品一区二区三区欧美| 中国女人久久久| 91精品二区| 天堂va蜜桃一区二区三区| 91久久中文| 一区二区电影| 欧美日韩夜夜| 精品国产乱码久久久| 成人午夜网址| 国产精品原创| 亚洲一级黄色| 久久最新视频| 青青草伊人久久| 动漫av一区| 在线日韩中文| 免费观看在线综合色| 日本成人在线不卡视频| 国产精品白浆| 丝袜美腿一区| 午夜在线一区| 91国内精品| 精品五月天堂| 久久久人人人| 视频一区二区中文字幕| 日韩美女国产精品| 麻豆精品在线观看| 成人久久一区| 亚洲综合欧美| 国产精品国码视频| 另类专区亚洲| 亚洲免费一区二区| 国产精品一区二区三区四区在线观看| 精品中文在线| 亚洲精品小说| 欧美日韩伊人| 亚洲va中文在线播放免费| 久久大逼视频| 欧美极品中文字幕| 久久网站免费观看| 免费在线成人网| 国产精品成人自拍| 亚洲不卡av不卡一区二区| 亚洲无线观看| 国产一区二区三区四区五区| 欧美日韩高清| 国产日韩欧美三级| 免费一二一二在线视频 | 麻豆精品视频在线观看| 成人羞羞视频播放网站| 蜜臀av国产精品久久久久 | 在线手机中文字幕| 亚洲一区亚洲| 美女在线视频一区| 午夜日韩av| 美女视频网站久久| 自拍日韩欧美| 久久久亚洲欧洲日产| 欧美成人久久| 国产精品资源| 婷婷亚洲五月| 精品三级在线| 色狠狠一区二区三区| 成人小电影网站| 日本va欧美va精品发布| 激情欧美丁香| 麻豆精品视频在线| 欧美理论视频| 麻豆国产精品| 蜜桃一区二区三区在线| 国产精品伦理久久久久久| 免费看欧美美女黄的网站| а√在线中文在线新版| 青草av.久久免费一区| 五月综合激情| 国产h片在线观看|