亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python制作一個隨機抽獎小工具的實現

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

熱門標簽:銀川電話機器人電話 如何地圖標注公司 外賣地址有什么地圖標注 企業彩鈴地圖標注 上海正規的外呼系統最新報價 長春極信防封電銷卡批發 電銷機器人錄音要學習什么 預覽式外呼系統 煙臺電話外呼營銷系統

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

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

先看效果:

1. 核心功能設計

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

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

名單導入

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

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

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

參考格式案例

獎項類型選擇

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

本輪人數

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

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

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

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

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

抽獎時輪播區域

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

人員名單

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

中獎記錄

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

開始抽獎

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

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

結束

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

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

重置

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

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

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

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

2. GUI設計與實現

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

基于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.active
        names = [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+'\n\n'
            window['result'].update(luckyNames)
            return
        time.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 = False
luckyNames = ''

# 事件循環
while True:
    event, values = window.read()
    if event in (None, '關閉程序'):
        break
    if event == '_file':
        nameList(window)

    if event == '開始抽獎':
        if is_run:
            sg.popup('抽獎進行中,無需重復操作......', title='提示')
            continue
        try:
            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='提示')
            continue
        yes_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()

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

啟動頁如下:

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

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

您可能感興趣的文章:
  • Python利用帶權重隨機數解決抽獎和游戲爆裝備問題

標簽:潮州 佳木斯 宜昌 上饒 湖北 西寧 珠海 盤錦

巨人網絡通訊聲明:本文標題《Python制作一個隨機抽獎小工具的實現》,本文關鍵詞  Python,制作,一個,隨機,抽獎,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python制作一個隨機抽獎小工具的實現》相關的同類信息!
  • 本頁收集關于Python制作一個隨機抽獎小工具的實現的相關信息資訊供網民參考!
  • 推薦文章
    国产成人啪精品| 精品久久久久久中文字幕一区| 精品久久久久久中文字幕2017| 一级毛片视频播放| 99久久精品国产国产毛片| 国产一级生活片| 国产美女在线观看| 天天色色色| 四虎影视精品永久免费网站 | 国产视频久久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久成人亚洲| 欧美激情中文字幕一区二区| 国产精品免费精品自在线观看| 日本免费乱理伦片在线观看2018| 欧美日本免费| 日本免费乱人伦在线观看| 天天色成人| 精品视频免费在线| 91麻豆精品国产自产在线观看一区| 亚久久伊人精品青青草原2020| 日韩男人天堂| 久久久久久久免费视频| 久草免费在线观看| 九九热国产视频| 91麻豆高清国产在线播放| 国产一区国产二区国产三区| 国产伦久视频免费观看视频| 欧美激情影院| 四虎影视久久| 美女被草网站| 99久久精品费精品国产一区二区| 国产麻豆精品免费密入口| 国产精品1024在线永久免费| 一级女人毛片人一女人| 免费国产一级特黄aa大片在线| 亚洲爆爽| 青青久在线视频| 精品在线视频播放| 久久久成人影院| 欧美国产日韩一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 色综合久久天天综线观看| 日本在线不卡免费视频一区| 日韩中文字幕在线亚洲一区 | 欧美另类videosbestsex久久| 日本特黄特色aaa大片免费| 欧美大片a一级毛片视频| 九九久久国产精品| 亚洲女人国产香蕉久久精品| 二级片在线观看| 欧美日本免费| 四虎影视久久久| 国产一区国产二区国产三区| 国产亚洲男人的天堂在线观看| 深夜做爰性大片中文| 国产a视频| 国产91丝袜高跟系列| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 黄视频网站免费| 欧美国产日韩精品| 色综合久久手机在线| 青青青草影院 | 麻豆午夜视频| 国产伦久视频免费观看视频| 日韩免费在线观看视频| 国产网站在线| 中文字幕97| 青青久在线视频| 亚洲女初尝黑人巨高清在线观看| 一 级 黄 中国色 片| 韩国毛片| 亚洲第一页色| 91麻豆精品国产片在线观看| 久久成人亚洲| 免费国产在线视频| 国产精品免费久久| 黄视频网站免费| 久久国产精品自由自在| 美女免费毛片| 你懂的日韩| 黄视频网站在线看| 国产成人精品综合| 九九免费高清在线观看视频| 精品毛片视频| 午夜激情视频在线观看| 国产精品123| 国产综合成人观看在线| 四虎影视库国产精品一区| 韩国妈妈的朋友在线播放| 高清一级毛片一本到免费观看| 天堂网中文字幕| 日韩在线观看视频网站| 国产成人精品综合| 日韩专区在线播放| 国产福利免费视频| 九九九网站| 日本伦理片网站| 精品视频在线看| 亚洲女初尝黑人巨高清在线观看| 天天做日日爱| 成人a大片在线观看| 黄视频网站在线免费观看| 欧美国产日韩久久久| 国产一区二区精品在线观看| 中文字幕一区二区三区精彩视频| 日韩男人天堂| 色综合久久天天综合绕观看| 美女被草网站| 青青久久网| 久久久成人网| 国产一区二区精品在线观看| 999久久狠狠免费精品| 美女免费精品高清毛片在线视 | 九九久久国产精品| 免费一级片在线观看| 久草免费在线观看| 97视频免费在线观看| 黄视频网站免费看| 韩国毛片基地| 成人高清免费| 精品视频一区二区三区免费| 一级女性全黄生活片免费| 中文字幕一区二区三区 精品| 国产成a人片在线观看视频| 午夜在线影院| 国产不卡在线看| 成人免费福利片在线观看| 韩国三级视频在线观看| 九九精品在线| 欧美爱爱网| 国产视频一区在线| 亚洲精品中文字幕久久久久久| 深夜做爰性大片中文| 香蕉视频三级| 精品国产香蕉在线播出| 黄视频网站免费观看| 成人影视在线播放| 国产麻豆精品高清在线播放| 精品久久久久久免费影院| 欧美电影免费看大全| 精品在线视频播放| 国产麻豆精品高清在线播放| 亚洲 国产精品 日韩| 99久久精品国产麻豆| 成人影院一区二区三区| 亚洲精品中文字幕久久久久久| 国产不卡福利| 高清一级片| 国产精品1024在线永久免费| 久久99欧美| 可以免费看污视频的网站| 国产不卡在线观看视频| 国产伦精品一区二区三区在线观看| 国产成a人片在线观看视频| 日韩专区一区| 日本特黄特色aaa大片免费| 成人免费观看视频| 99久久精品国产国产毛片| 韩国毛片| 99久久网站| 国产福利免费观看| 深夜做爰性大片中文| 欧美一级视频免费观看| 日韩免费在线视频| 日韩一级黄色| 欧美日本免费| 精品视频免费在线| 久久99中文字幕久久| 天天做人人爱夜夜爽2020 | 欧美18性精品| 午夜在线亚洲| 久久国产精品永久免费网站| 成人高清免费| 999精品视频在线| 国产麻豆精品视频| 国产麻豆精品免费密入口| 午夜久久网| 99热热久久| 日韩一级黄色大片| 亚久久伊人精品青青草原2020| 国产麻豆精品视频| 精品国产一区二区三区精东影业| 亚洲精品久久玖玖玖玖| a级毛片免费全部播放| 日韩av成人| 欧美日本二区| 久久精品大片| 韩国毛片| 国产视频一区在线| 成人av在线播放| 欧美18性精品| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产欧美精品午夜在线播放| 国产不卡在线观看| 日韩欧美一及在线播放| 韩国三级香港三级日本三级la| 精品国产一区二区三区久久久狼| 九九免费精品视频|