您好,登錄后才能下訂單哦!
如何在Python中使用Tkinter實現(xiàn)一個滾動抽獎器效果?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一、Tkinter簡介
Tkinter 是 Python 的標準 GUI(Graphical User Interface,圖形用戶接口)庫,Python 使用 Tkinter 可以快速地創(chuàng)建 GUI 應(yīng)用程序。
在 Python2 和 Python3 中,Tkinter 都在標準庫中,無需安裝即可使用。在 Python2 中,這個庫叫 Tkinter ,在 Python3 中,這個庫叫 tkinter ,首字母大小寫不相同,在導包時需要注意。
雖然 Python 的官網(wǎng)已經(jīng)宣布,2020年4月,Python2 會退休,但是在很多公司,依然在使用 Python2 ,所以本文的代碼也會兼容 Python2 和 Python3 。
Tkinter 提供了非常豐富的圖形界面功能,實現(xiàn)一個抽獎器,只需要用到里面很少的一部分功能。
二、使用Tkinter實現(xiàn)滾動抽獎器的步驟
1. 界面搭建
首先需要搭建一個簡單的 GUI 界面,效果如下圖(參考)。
首先創(chuàng)建一個大小適合的窗口,使用 Tkinter.Tk() 方法即可創(chuàng)建并返回一個窗口對象 window(自定義的對象名)。
使用 window 對象的 geometry(widthxheight+x+y) 方法來設(shè)置窗口的大小,geometry() 方法中的參數(shù)必須按照格式傳入才行,參數(shù)格式為 widthxheight+x+y,如 '405x320+250+15',width 是窗口的寬度,height 是窗口的高度,中間使用乘號連接,如果敲不出這個符號,可以去源碼中復制,x 和 y 用于設(shè)置窗口離電腦屏幕左上角的距離。
2. 設(shè)置文字顯示框
抽獎時,要在界面上快速地滾動顯示當前的中獎?wù)咝彰?,所以要設(shè)置一個文字顯示框。
使用 Tkinter 中的 Label 類(不一定用 Label ,實現(xiàn)方法有很多),實例化 Label 的對象來顯示文字,充當顯示框。Label 標簽默認不可點擊不可選中也不可編輯,用來顯示比較少的內(nèi)容(人名)是比較適合的。
要設(shè)置 Label 顯示的文字,需要實例化一個 StringVar 類的對象,使用 StringVar 中的 value 傳入初始顯示的內(nèi)容。在 Label 中 將 StringVar 對象傳給 textvariable ,這樣 Label 和 StringVar 就一一對應(yīng)起來了。
實例化 Label 時,第一個參數(shù)必須是 Tkinter 窗口對象 window,然后使用關(guān)鍵字參數(shù)的方式,根據(jù)需要設(shè)置顯示框大小,背景顏色,顯示字體等,再通過 Label 對象的 place() 方法設(shè)置它相對于窗口左上角的位置。
需要多個 Label 時,如法炮制。
3. 設(shè)置按鈕
在界面中,需要兩個按鈕,一個“開始”按鈕,一個“結(jié)束”按鈕,用來控制抽獎的開始和停止。(當然也可以設(shè)置成同一個按鈕,實現(xiàn)方法也差不多)
使用 Tkinter 中的 Button 類,實例化 Button 的對象來創(chuàng)建按鈕。
實例化 Button 時,第一個參數(shù)也必須是 Tkinter 窗口對象 window,然后根據(jù)需要設(shè)置按鈕大小,背景顏色,顯示字體等,最后還是使用 place() 方法設(shè)置它相對于的窗口左上角的位置。
當點擊按鈕時,抽獎器要開始抽獎或結(jié)束抽獎,也就是說點擊按鈕時,要觸發(fā)某件事。觸發(fā)的事件可以使用函數(shù)來實現(xiàn),然后用匿名函數(shù)的方式傳給 Button 中的 command ,將點擊按鈕和事件處理關(guān)聯(lián)到一起。
三、抽獎器代碼實現(xiàn)和效果展示
根據(jù)上面的簡單分析,代碼按步驟依次來實現(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 data = ['風清揚', '無崖子', '東邪', '西毒', '南帝', '北丐'] going = True is_run = False def lottery_roll(var1, var2): global going show_member = random.choice(data) var1.set(show_member) if going: window.after(50, lottery_roll, var1, var2) else: var2.set('恭喜 {} ?。?!'.format(show_member)) going = True return def lottery_start(var1, var2): global is_run if is_run: return is_run = True var2.set('幸運兒是你嗎。。。') lottery_roll(var1, var2) def lottery_end(): global going, is_run if is_run: going = False is_run = False if __name__ == '__main__': window = Tkinter.Tk() window.geometry('405x320+250+15') window.title(' 滾 動 抽 獎 器') bg_label = Label(window, width=70, height=24, bg='#ECf5FF') bg_label.place(anchor=NW, x=0, y=0) var1 = StringVar(value='即 將 開 始') show_label1 = Label(window, textvariable=var1, justify='left', anchor=CENTER, width=17, height=3, bg='#BFEFFF', font='楷體 -40 bold', foreground='black') show_label1.place(anchor=NW, x=21, y=20) var2 = StringVar(value='幸運兒是你嗎。。。') show_label2 = Label(window, textvariable=var2, justify='left', anchor=CENTER, width=38, height=3, bg='#ECf5FF', font='楷體 -18 bold', foreground='red') show_label2.place(anchor=NW, x=21, y=240) button1 = Button(window, text='開始', command=lambda: lottery_start(var1, var2), width=14, height=2, bg='#A8A8A8', font='宋體 -18 bold') button1.place(anchor=NW, x=20, y=175) button2 = Button(window, text='結(jié)束', command=lambda: lottery_end(), width=14, height=2, bg='#A8A8A8', font='宋體 -18 bold') button2.place(anchor=NW, x=232, y=175) window.mainloop()
關(guān)于如何在Python中使用Tkinter實現(xiàn)一個滾動抽獎器效果問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。