最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用Tkinter實(shí)現(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng)器的步驟詳解

 更新時(shí)間:2020年01月06日 11:37:28   作者:Python碎片  
這篇文章主要介紹了Python使用Tkinter實(shí)現(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng)器,,本文分場(chǎng)景通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

我使用 Python 中的 Tkinter 模塊實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的滾動(dòng)抽獎(jiǎng)器,接下來(lái)繼續(xù)寫(xiě)一個(gè)簡(jiǎn)單的轉(zhuǎn)盤(pán)抽獎(jiǎng)器。

Tkinter 實(shí)現(xiàn)滾動(dòng)抽獎(jiǎng)器參考:http://www.fzitv.net/article/177913.htm

滾動(dòng)抽獎(jiǎng)器與點(diǎn)名的場(chǎng)景相似,是從一群人中抽出中獎(jiǎng)的人,獎(jiǎng)品是提前確定了的,抽獎(jiǎng)只是確定中獎(jiǎng)的人是誰(shuí)。這種場(chǎng)景比較適合年會(huì)抽獎(jiǎng),獎(jiǎng)品的種類和數(shù)量已經(jīng)確定了,通過(guò)抽獎(jiǎng)來(lái)抽出中獎(jiǎng)人員,一個(gè)獎(jiǎng)品對(duì)應(yīng)一次抽獎(jiǎng),直到獎(jiǎng)品抽完為止。

還有一種場(chǎng)景是只固定了獎(jiǎng)品種類,數(shù)量不受限制,有參與資格的人都可以抽獎(jiǎng),可能所有人都抽中了“特等獎(jiǎng)”,也可能所有人都抽到了“謝謝參與”,最終發(fā)出多少獎(jiǎng)品在抽獎(jiǎng)前沒(méi)法確定。這種場(chǎng)景比較適合使用“大轉(zhuǎn)盤(pán)”抽獎(jiǎng)器。

一、使用Tkinter實(shí)現(xiàn)滾動(dòng)抽獎(jiǎng)器的步驟

1. 界面搭建

首先需要搭建一個(gè)簡(jiǎn)單的 GUI 界面,效果如下圖(參考)。

首先創(chuàng)建一個(gè)大小適合的窗口,使用 Tkinter.Tk() 方法創(chuàng)建并返回一個(gè)窗口對(duì)象 window 。

使用 window 對(duì)象的 geometry(widthxheight+x+y) 方法設(shè)置窗口的大小,geometry() 方法中的參數(shù)格式為 widthxheight+x+y,如 '500x290+250+150',width 是窗口的寬度,height 是窗口的高度,中間使用乘號(hào)連接,如果敲不出這個(gè)符號(hào),可以去源碼中復(fù)制,x 和 y 用于設(shè)置窗口離電腦屏幕左上角的距離。

2. 設(shè)置轉(zhuǎn)盤(pán)的內(nèi)容

使用轉(zhuǎn)盤(pán)抽獎(jiǎng)時(shí),點(diǎn)擊開(kāi)始后,轉(zhuǎn)到不同方向?qū)?yīng)不同的獎(jiǎng)品種類,所以要設(shè)置每個(gè)方向顯示不同的內(nèi)容。

使用 Tkinter 中的 Label 類,實(shí)例化 Label 的對(duì)象來(lái)顯示文字。

實(shí)例化 Label 時(shí),第一個(gè)參數(shù)必須是 Tkinter 窗口對(duì)象 window,然后通過(guò) text 設(shè)置顯示的內(nèi)容。每個(gè) Label 顯示的內(nèi)容都是固定不變的,所以可以一開(kāi)始就寫(xiě)死。然后使用關(guān)鍵字參數(shù)的方式,根據(jù)需要設(shè)置顯示框大小,背景顏色,顯示字體等,再通過(guò) Label 對(duì)象的 place() 方法設(shè)置它相對(duì)于窗口左上角的位置。

在這個(gè)轉(zhuǎn)盤(pán)抽獎(jiǎng)器中,我分了8個(gè)不同的方向,8個(gè)區(qū)域,所以需要8個(gè) Label 。在這8個(gè)標(biāo)簽中,除了顯示的內(nèi)容和位置不一樣,其他的設(shè)置都是一樣的,所以將添加標(biāo)簽的步驟封裝成一個(gè)函數(shù),創(chuàng)建標(biāo)簽時(shí)更方便。

3. 設(shè)置開(kāi)始按鈕

在界面中,需要一個(gè)“開(kāi)始”按鈕,用來(lái)開(kāi)始抽獎(jiǎng)。轉(zhuǎn)盤(pán)抽獎(jiǎng)是點(diǎn)擊開(kāi)始后,抽獎(jiǎng)界面開(kāi)始轉(zhuǎn)動(dòng),速度由快到慢,直到自動(dòng)停止,最后停止的區(qū)域就是中獎(jiǎng)的區(qū)域,所以不用“停止”按鈕。

使用 Tkinter 中的 Button 類,實(shí)例化 Button 的對(duì)象來(lái)創(chuàng)建“開(kāi)始”按鈕。

實(shí)例化 Button 時(shí),第一個(gè)參數(shù)也必須是 Tkinter 窗口對(duì)象 window,然后根據(jù)需要設(shè)置按鈕大小,背景顏色,顯示字體等,最后還是使用 place() 方法設(shè)置它相對(duì)于的窗口左上角的位置。

當(dāng)點(diǎn)擊按鈕時(shí),開(kāi)始抽獎(jiǎng),定義好處理抽獎(jiǎng)邏輯的函數(shù),用匿名函數(shù)的方式傳給 Button 中的 command ,將點(diǎn)擊按鈕和抽獎(jiǎng)邏輯處理函數(shù)關(guān)聯(lián)到一起。

二、抽獎(jiǎng)器代碼實(shí)現(xiàn)和效果展示

按照上面分析的步驟依次實(shí)現(xiàn),完整代碼如下。

# coding=utf-8
import sys
if sys.version_info[0] == 2:
 import Tkinter
 from Tkinter import *
else:
 import tkinter as Tkinter
 from tkinter import *
import random
 
is_run = False
 
 
def lottery_whirl(data, i, number):
 global is_run
 if i == 0:
 j = 0
 else:
 j = i % 8
 data[j-1]['bg'] = '#CCCCCC'
 data[j]['bg'] = '#00CD00'
 wait = [a for a in range(100, 300, 10)] + [b for b in range(300, 600, 300 // (number-28))] + \
 [c for c in range(600, 1200, 120)] + [d for d in range(1200, 1800, 200)]
 if i < number:
 window.after(wait[i], lottery_whirl, data, i + 1, number)
 else:
 is_run = False
 
 
def lottery_start(data):
 global is_run
 if is_run:
 return
 is_run = True
 for x in range(len(data) - 1):
 data[x]['bg'] = '#CCCCCC'
 number = random.randint(30, 53)
 lottery_whirl(data, 0, number)
 
 
def create_label(name, x, y):
 label = Label(window, text=name, width=13, height=3, bg='#CCCCCC', font='宋體 -18 bold')
 label.place(anchor=NW, x=x, y=y)
 return label
 
 
if __name__ == '__main__':
 window = Tkinter.Tk()
 window.geometry('500x290+250+150')
 window.title(' 轉(zhuǎn) 盤(pán) 抽 獎(jiǎng) 器')
 
 bg_label = Label(window, width=80, height=24, bg='#ECf5FF')
 bg_label.place(anchor=NW, x=0, y=0)
 
 label1 = create_label('風(fēng)清揚(yáng)', 20, 20)
 label2 = create_label('北丐', 180, 20)
 label3 = create_label('無(wú)崖子', 340, 20)
 label4 = create_label('西毒', 20, 110)
 label5 = create_label('東邪', 340, 110)
 label6 = create_label('掃地僧', 20, 200)
 label7 = create_label('南帝', 180, 200)
 label8 = create_label('張三豐', 340, 200)
 data = [label1, label2, label3, label5, label8, label7, label6, label4]
 button_core = Button(window, text='開(kāi) 始', command=lambda: lottery_start(data), width=130, height=53, bg='#00CD00',
  font='宋體 -18 bold', bitmap='gray50', compound=Tkinter.CENTER)
 button_core.place(anchor=NW, x=180, y=110)
 window.mainloop()

當(dāng)點(diǎn)擊開(kāi)始抽獎(jiǎng)后,抽獎(jiǎng)界面開(kāi)始轉(zhuǎn)動(dòng),直到自動(dòng)停止才算一次抽獎(jiǎng)結(jié)束。如果第一次抽獎(jiǎng)還沒(méi)有結(jié)束,點(diǎn)了第二次(或很多次)抽獎(jiǎng),會(huì)有多次抽獎(jiǎng)并行運(yùn)行,那樣會(huì)有很多次轉(zhuǎn)動(dòng)重疊到一起,相互干擾,抽獎(jiǎng)器就失效了。所以在代碼中設(shè)置了一個(gè)全局變量 is_run,表示抽獎(jiǎng)器是否還在運(yùn)行中,如果還在運(yùn)行中,就不會(huì)進(jìn)行下一次抽獎(jiǎng)。

在抽獎(jiǎng)器轉(zhuǎn)動(dòng)時(shí),速度是由快變慢的,所以設(shè)置了一個(gè)列表來(lái)控制轉(zhuǎn)動(dòng)的延遲時(shí)間,這個(gè)時(shí)間列表可以分多段,每一段可以是等差數(shù)列,不過(guò)差值設(shè)置越來(lái)越大。

點(diǎn)擊開(kāi)始按鈕,開(kāi)始轉(zhuǎn)動(dòng)時(shí),代碼中已經(jīng)確定了轉(zhuǎn)到哪個(gè)位置(中獎(jiǎng)?lì)愋?,轉(zhuǎn)到哪個(gè)位置是由轉(zhuǎn)動(dòng)的次數(shù)決定的,轉(zhuǎn)動(dòng)次數(shù)也是從一個(gè)列表中取。轉(zhuǎn)盤(pán)抽獎(jiǎng)不會(huì)設(shè)置停在每個(gè)區(qū)域的概率都一樣(那樣意味著每種獎(jiǎng)的中獎(jiǎng)概率相同),所以,從列表中取轉(zhuǎn)動(dòng)次數(shù)時(shí),先根據(jù)需要設(shè)置好概率的大小,使用 random 模塊中的 choices 就可以完成設(shè)置。

random 模塊使用參考: http://www.fzitv.net/article/66368.htm

最后的抽獎(jiǎng)器效果如下:

總結(jié)

以上所述是小編給大家介紹的Python使用Tkinter實(shí)現(xiàn)滾動(dòng)轉(zhuǎn)盤(pán)抽獎(jiǎng)器的步驟詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python中uuid模塊生成唯一標(biāo)識(shí)符的方法詳解

    Python中uuid模塊生成唯一標(biāo)識(shí)符的方法詳解

    這篇文章主要給大家介紹了關(guān)于Python中uuid模塊生成唯一標(biāo)識(shí)符的相關(guān)資料,uuid庫(kù)是Python標(biāo)準(zhǔn)庫(kù)中的一個(gè)功能強(qiáng)大的庫(kù),可以用于生成全局唯一標(biāo)識(shí)符(UUID),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • python攻防-破解附近局域網(wǎng)WIFI密碼實(shí)現(xiàn)上網(wǎng)自由

    python攻防-破解附近局域網(wǎng)WIFI密碼實(shí)現(xiàn)上網(wǎng)自由

    本文將記錄學(xué)習(xí)如何通過(guò) Python 腳本實(shí)破解附近局域網(wǎng) WIFI 密碼的暴力破解,隨時(shí)隨地免費(fèi)蹭網(wǎng),再也不被WiFi密碼困擾,實(shí)現(xiàn)蹭網(wǎng)自由
    2021-08-08
  • 使用Python的Twisted框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器

    使用Python的Twisted框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器

    這篇文章主要介紹了使用Python的Twisted框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器,翻譯自Twisted的文檔,需要的朋友可以參考下
    2015-04-04
  • python dataframe向下向上填充,fillna和ffill的方法

    python dataframe向下向上填充,fillna和ffill的方法

    今天小編就為大家分享一篇python dataframe向下向上填充,fillna和ffill的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • python判斷是否漢字的5種方法實(shí)例

    python判斷是否漢字的5種方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于python判斷是否漢字的5種方法,文中通過(guò)實(shí)例代碼將判斷的幾種方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 替換python字典中的key值方法

    替換python字典中的key值方法

    今天小編就為大家分享一篇替換python字典中的key值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python爬蟲(chóng)403錯(cuò)誤的終極解決方案

    Python爬蟲(chóng)403錯(cuò)誤的終極解決方案

    爬蟲(chóng)在爬取數(shù)據(jù)時(shí),常常會(huì)遇到"HTTP Error 403: Forbidden"的提示,其實(shí)它只是一個(gè)HTTP狀態(tài)碼,表示你在請(qǐng)求一個(gè)資源文件但是nginx不允許你查看,下面這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)403錯(cuò)誤的終極解決方案,需要的朋友可以參考下
    2023-05-05
  • 一篇文章講解用VScode寫(xiě)Python怎么運(yùn)行

    一篇文章講解用VScode寫(xiě)Python怎么運(yùn)行

    這篇文章主要介紹了如何在Visual?Studio?Code(VSCode)中編寫(xiě)和運(yùn)行Python代碼,包括安裝VSCode、安裝Python插件、配置Python環(huán)境、創(chuàng)建和運(yùn)行Python文件、調(diào)試Python代碼、代碼格式化、代碼片段、Git集成以及單元測(cè)試等,需要的朋友可以參考下
    2024-12-12
  • Python實(shí)現(xiàn)將字典(列表按列)存入csv文件

    Python實(shí)現(xiàn)將字典(列表按列)存入csv文件

    這篇文章主要介紹了Python實(shí)現(xiàn)將字典(列表按列)存入csv文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 應(yīng)用OpenCV和Python進(jìn)行SIFT算法的實(shí)現(xiàn)詳解

    應(yīng)用OpenCV和Python進(jìn)行SIFT算法的實(shí)現(xiàn)詳解

    這篇文章主要介紹了應(yīng)用OpenCV和Python進(jìn)行SIFT算法的實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

建阳市| 宁夏| 佛学| 兴隆县| 甘肃省| 永春县| 绍兴市| 班戈县| 保康县| 大兴区| 安庆市| 林西县| 桂东县| 固原市| 晋州市| 西畴县| 泸定县| 嘉鱼县| 江源县| 葵青区| 南丹县| 修水县| 梨树县| 红安县| 九江县| 红桥区| 疏附县| 马山县| 定远县| 新干县| 乌什县| 林西县| 华池县| 建昌县| 黄冈市| 彭泽县| 德化县| 博兴县| 无锡市| 乐东| 泽州县|