激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python使用Tkinter實現轉盤抽獎器的步驟詳解

Python使用Tkinter實現轉盤抽獎器的步驟詳解

2020-05-08 09:26Python碎片 Python

這篇文章主要介紹了Python使用Tkinter實現轉盤抽獎器,,本文分場景通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

我使用 Python 中的 Tkinter 模塊實現了一個簡單的滾動抽獎器,接下來繼續寫一個簡單的轉盤抽獎器。

Tkinter 實現滾動抽獎器參考:http://www.zmynmublwnt.cn/article/63918.html

滾動抽獎器與點名的場景相似,是從一群人中抽出中獎的人,獎品是提前確定了的,抽獎只是確定中獎的人是誰。這種場景比較適合年會抽獎,獎品的種類和數量已經確定了,通過抽獎來抽出中獎人員,一個獎品對應一次抽獎,直到獎品抽完為止。

還有一種場景是只固定了獎品種類,數量不受限制,有參與資格的人都可以抽獎,可能所有人都抽中了“特等獎”,也可能所有人都抽到了“謝謝參與”,最終發出多少獎品在抽獎前沒法確定。這種場景比較適合使用“大轉盤”抽獎器。

一、使用Tkinter實現滾動抽獎器的步驟

1. 界面搭建

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

Python使用Tkinter實現轉盤抽獎器的步驟詳解

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

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

2. 設置轉盤的內容

使用轉盤抽獎時,點擊開始后,轉到不同方向對應不同的獎品種類,所以要設置每個方向顯示不同的內容。

使用 Tkinter 中的 Label 類,實例化 Label 的對象來顯示文字。

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

在這個轉盤抽獎器中,我分了8個不同的方向,8個區域,所以需要8個 Label 。在這8個標簽中,除了顯示的內容和位置不一樣,其他的設置都是一樣的,所以將添加標簽的步驟封裝成一個函數,創建標簽時更方便。

3. 設置開始按鈕

在界面中,需要一個“開始”按鈕,用來開始抽獎。轉盤抽獎是點擊開始后,抽獎界面開始轉動,速度由快到慢,直到自動停止,最后停止的區域就是中獎的區域,所以不用“停止”按鈕。

使用 Tkinter 中的 Button 類,實例化 Button 的對象來創建“開始”按鈕。

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

當點擊按鈕時,開始抽獎,定義好處理抽獎邏輯的函數,用匿名函數的方式傳給 Button 中的 command ,將點擊按鈕和抽獎邏輯處理函數關聯到一起。

二、抽獎器代碼實現和效果展示

按照上面分析的步驟依次實現,完整代碼如下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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(' 轉 盤 抽 獎 器')
 
 bg_label = Label(window, width=80, height=24, bg='#ECf5FF')
 bg_label.place(anchor=NW, x=0, y=0)
 
 label1 = create_label('風清揚', 20, 20)
 label2 = create_label('北丐', 180, 20)
 label3 = create_label('無崖子', 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='開 始', 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()

當點擊開始抽獎后,抽獎界面開始轉動,直到自動停止才算一次抽獎結束。如果第一次抽獎還沒有結束,點了第二次(或很多次)抽獎,會有多次抽獎并行運行,那樣會有很多次轉動重疊到一起,相互干擾,抽獎器就失效了。所以在代碼中設置了一個全局變量 is_run,表示抽獎器是否還在運行中,如果還在運行中,就不會進行下一次抽獎。

在抽獎器轉動時,速度是由快變慢的,所以設置了一個列表來控制轉動的延遲時間,這個時間列表可以分多段,每一段可以是等差數列,不過差值設置越來越大。

點擊開始按鈕,開始轉動時,代碼中已經確定了轉到哪個位置(中獎類型),轉到哪個位置是由轉動的次數決定的,轉動次數也是從一個列表中取。轉盤抽獎不會設置停在每個區域的概率都一樣(那樣意味著每種獎的中獎概率相同),所以,從列表中取轉動次數時,先根據需要設置好概率的大小,使用 random 模塊中的 choices 就可以完成設置。

最后的抽獎器效果如下:

Python使用Tkinter實現轉盤抽獎器的步驟詳解

總結

以上所述是小編給大家介紹的Python使用Tkinter實現滾動轉盤抽獎器的步驟詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

原文鏈接:https://blog.csdn.net/weixin_43790276/article/details/103828556

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩视频不卡 | 午夜九九九 | 成人短视频在线观看 | 欧美视频国产精品 | 久久亚洲线观看视频 | 亚洲欧美在线看 | 欧美中文字幕一区二区三区亚洲 | 欧洲黄视频 | 日韩av官网| 欧美一区高清 | 成人羞羞视频在线观看 | 国产一级在线看 | 日韩在线播放中文字幕 | 久久精品79国产精品 | 伊人二本二区 | 欧美成人午夜 | 麻豆蜜桃在线观看 | 国产一区二区在线免费观看 | 第一区免费在线观看 | 国产乱一区二区三区视频 | 国产免费一区二区三区网站免费 | 色柚视频网站ww色 | 成人免费毛片一 | 天天草夜夜爽 | 国产免费最爽的乱淫视频a 午夜精品久久久久久久99热浪潮 | 精品69人人人人 | 性视频久久| 巨乳激情| 成人小视频在线播放 | 手机在线看片国产 | 日日狠狠久久偷偷四色综合免费 | 成人免费看毛片 | 欧美乱论| 成年人高清视频在线观看 | 悠悠成人资源亚洲一区二区 | 日本aaaa片毛片免费观蜜桃 | 色999国产 | a黄在线观看 | 日韩99| 一区国产在线观看 | 免费看真人a一级毛片 |