Python基于Tkinter實現(xiàn)的垃圾分類答題軟件代碼
一、Tkinter
什么是GUI
圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。圖形用戶界面是一種人與計算機通信的界面顯示格式,允許用戶使用鼠標等輸入設備操縱屏幕上的圖標或菜單選項,以選擇命令、調(diào)用文件、啟動程序或執(zhí)行其它一些日常任務。與通過鍵盤輸入文本或字符命令來完成例行任務的字符界面相比,圖形用戶界面有許多優(yōu)點。
圖形用戶界面由窗口、下拉菜單、對話框及其相應的控制機制構成,在各種新式應用程序中都是標準化的,即相同的操作總是以同樣的方式來完成,在圖形用戶界面,用戶看到和操作的都是圖形對象,應用的是計算機圖形學的技術。
GUI 編程類似于“搭積木”,將一個個組件(Widget)放到窗口中。如下是 windows 中的 畫圖軟件,就是一個典型的 GUI 程序:
常用的 GUI 庫
1. Tkinter
tkinter(Tk interface)是 Python 的標準 GUI 庫,支持跨平臺的 GUI 程序開發(fā)。tkinter 適合小型的 GUI 程序編寫,也特別適合初學者學習 GUI 編程。本次以 tkinter 為核心進行講解。
2. wxPython
wxPython 是比較流行的 GUI 庫,適合大型應用程序開發(fā),功能強于 tkinter,整體設計 框架類似于 MFC(Microsoft Foundation Classes 微軟基礎類庫)。
3. PyQT
Qt 是一種開源的 GUI 庫,適合大型 GUI 程序開發(fā),PyQT 是 Qt 工具包標準的 Python 實現(xiàn)。我們也可以使用 Qt Desginer 界面設計器快速開發(fā) GUI 應用程序 。
一個最簡單的 Tkinter 程序至少應包含以下四個部分:
- 導入 tkinter 模塊
- 創(chuàng)建主窗口,也稱 root 窗口(即根窗口)
- 添加人機交互控件,同時編寫相應的事件函數(shù)
- 通過主循環(huán)(mainloop)來顯示主窗口
二、最終效果
先來看看本次項目的最終效果:
項目運行之后,程序會從題庫中隨機抽取10道題目來測試,當你答對或答錯都會有彈窗提示,答對一道得10分,當題目全部答完后會提示你題目已做完,并顯示你本次考試的最終得分。話不多說,開始上教程。
三、項目過程
3.1分析布局
由于本次只是做一個簡易的答題程序,所以整體頁面不需要太復雜。首先,需要Label標簽來顯示每道題的題目,接著就是4個垂直擺放(或橫向)單選框按鈕,最后下面放個下一題的點擊按鈕。
3.2創(chuàng)建窗口
做任何項目,都需要先創(chuàng)建主窗口,也稱 root 窗口(即根窗口)。
# 導入本次項目用到的庫 import tkinter from tkinter import * from tkinter.messagebox import * import random if __name__ == '__main__': root = tkinter.Tk() # 創(chuàng)建tkinter對象 root.title('垃圾分類答題考試') # 設置標題 root.geometry("500x200+500+300") # 設置頁面的位置和長寬 root.mainloop() # 讓窗口一直顯示出來
效果如下:
3.3構建題庫
本次做的是垃圾分類的答題程序,所以我在網(wǎng)上找了一些關于垃圾分類的題目。這里我就直接用列表套元組的方式來存儲數(shù)據(jù)了。說明一下,元組中的第一個是題目,后面依次是ABCD選項,最后是本題的答案選項。
# 準備一個題庫列表 object_list = [ ('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('茶葉渣應扔進哪個垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('吃剩的餅干渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('抽完煙的煙蒂是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('刀片屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('掉在地上的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('廢棄的食用油屬于?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('甘蔗渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('過期的化妝品是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('過期的貓糧屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('包裝藥片的鋁箔屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('喝茶剩下的茶葉渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('花生殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('壞掉的電腦屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('灰色塑料袋屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('回形針屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('雞骨頭屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('雞毛屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('家庭盆栽廢棄的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('堿性電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('膠卷屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('舊涼席屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('舊圖書屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('空的滅火器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('老舊電視機屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('落發(fā)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('哪一類可進行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('蘋果手機電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('染發(fā)劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('水銀溫度計屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('撕掉了的舊照片,應該丟到哪個垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ]
3.4創(chuàng)建組件
前面我們分析了本次項目的布局情況,需要1個Label便簽、4個單選按鈕、1個下一題按鈕,現(xiàn)在就開始將它們放置在主窗口中,從題庫中隨機抽取10道題目并顯示第一道題目。
# 導入本次項目用到的庫 import tkinter from tkinter import * from tkinter.messagebox import * import random # 準備一個題庫列表 object_list = [ ('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('茶葉渣應扔進哪個垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('吃剩的餅干渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('抽完煙的煙蒂是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('刀片屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('掉在地上的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('廢棄的食用油屬于?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('甘蔗渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('過期的化妝品是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('過期的貓糧屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('包裝藥片的鋁箔屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('喝茶剩下的茶葉渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('花生殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('壞掉的電腦屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('灰色塑料袋屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('回形針屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('雞骨頭屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('雞毛屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('家庭盆栽廢棄的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('堿性電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('膠卷屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('舊涼席屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('舊圖書屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('空的滅火器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('老舊電視機屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('落發(fā)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('哪一類可進行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('蘋果手機電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('染發(fā)劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('水銀溫度計屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('撕掉了的舊照片,應該丟到哪個垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ] if __name__ == '__main__': root = tkinter.Tk() # 創(chuàng)建tkinter對象 root.title('垃圾分類答題考試') # 設置標題 root.geometry("500x200+500+300") # 設置頁面的位置和長寬 # 從題庫中隨機抽取10個題目作為考試題 values = random.sample(object_list,10) # 創(chuàng)建一個字符串變量用來記錄選項值 s = tkinter.StringVar() s.set('E') # 設置初始值為'E',初始沒選中 # 設置初始題號和分值 num = 0 score = 0 label = tkinter.Label(root, text=values[num][0]) # 用來顯示題目 label.pack() # 創(chuàng)建第 1 個 Frame 組件 f1 = Frame(root) f1.pack() r1 = tkinter.Radiobutton(f1, variable=s, value='A', text=values[num][1]) # 安裝第一個單選按鈕 r1.pack() r2 = tkinter.Radiobutton(f1, variable=s, value='B', text=values[num][2]) # 安裝第二個單選按鈕 r2.pack() r3 = tkinter.Radiobutton(f1, variable=s, value='C', text=values[num][3]) # 安裝第三個單選按鈕 r3.pack() r4 = tkinter.Radiobutton(f1, variable=s, value='D', text=values[num][4]) # 安裝第四個單選按鈕 r4.pack() # 創(chuàng)建第 2 個 Frame 組件 f2 = Frame(root) f2.pack() # 創(chuàng)建下一題的按鈕 Button(f2, text='下一題').pack(side=LEFT) # 默認顯示第一道題目 label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目 # 顯示4個選項 r1["text"] = values[num][1] r2["text"] = values[num][2] r3["text"] = values[num][3] r4["text"] = values[num][4] root.mainloop() # 讓窗口一直顯示出來
效果如下:
現(xiàn)在你點擊下一題是沒有反應的,因為此時只是實現(xiàn)了頁面的布局工作,還沒有實現(xiàn)判斷對錯的功能。
3.5編寫事件函數(shù)
事件的邏輯是當你點擊下一題按鈕的時候,程序判斷你對本題的選項是否與題庫中的答案一致,如果相等,則通過彈窗的形式提示你答對了;如果不相等,則通過彈窗的形式提示你答錯了。提示完之后還要緊接著顯示下一道題目。每次判斷完之后都要檢測本題是否已經(jīng)是最后一道題目,如果是則停止答題,得出本次測試的總得分。
# 定義一個判斷選項正確性的函數(shù) def main(values): # 全局引用num和score變量 global num global score # 如果選項和答案相等則答對了 if s.get() == values[num][5]: showinfo("恭喜", "恭喜你答對了!") # 提示你答對了 score += 10 # 得分加10分 # 如果選項和答案不相等則答錯了 else: showinfo("遺憾", "遺憾你答錯了!") # 提示你答錯了 num = num + 1 # 記錄題號 # 如果題號已經(jīng)大于等于題目的總長度則需要進行結束并統(tǒng)計總分數(shù) if num >= len(values): showinfo("結果", f"全部題目做完了!\n您的最終得分為{score}分!") # 提示題目做完了,總結出你的得分 root.quit() # 程序退出 return # 顯示下一題 label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目 # 顯示4個選項 r1["text"] = values[num][1] r2["text"] = values[num][2] r3["text"] = values[num][3] r4["text"] = values[num][4] s.set('E') # 設置初始值為'E',初始沒選中
同時還需要在下一題按鈕那添加該事件函數(shù)
Button(f2, text='下一題', command=lambda:main(values)).pack(side=LEFT)
到這里一個簡易版的答題程序已經(jīng)實現(xiàn),效果如前面所示。
四、總結
本次使用了Python中的tkinter庫實現(xiàn)了一個簡易的垃圾分類答題程序,其中的題庫和各種參數(shù)大家可以發(fā)揮自己的創(chuàng)意,自行進行修改,基于此源碼的基礎上創(chuàng)作出你的作品!
源代碼
# 導入本次項目用到的庫 import tkinter from tkinter import * from tkinter.messagebox import * import random # 準備一個題庫列表 object_list = [ ('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('茶葉渣應扔進哪個垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('吃剩的餅干渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('抽完煙的煙蒂是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('刀片屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('掉在地上的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('廢棄的食用油屬于?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('甘蔗渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('過期的化妝品是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('過期的貓糧屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('包裝藥片的鋁箔屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('喝茶剩下的茶葉渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('花生殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('壞掉的電腦屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('灰色塑料袋屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('回形針屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('雞骨頭屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('雞毛屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('家庭盆栽廢棄的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('堿性電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('膠卷屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('舊涼席屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('舊圖書屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('空的滅火器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('老舊電視機屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('落發(fā)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('哪一類可進行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('蘋果手機電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('染發(fā)劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('水銀溫度計屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('撕掉了的舊照片,應該丟到哪個垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ] # 定義一個判斷選項正確性的函數(shù) def main(values): # 全局引用num和score變量 global num global score # 如果選項和答案相等則答對了 if s.get() == values[num][5]: showinfo("恭喜", "恭喜你答對了!") # 提示你答對了 score += 10 # 得分加10分 # 如果選項和答案不相等則答錯了 else: showinfo("遺憾", "遺憾你答錯了!") # 提示你答錯了 num = num + 1 # 記錄題號 # 如果題號已經(jīng)大于等于題目的總長度則需要進行結束并統(tǒng)計總分數(shù) if num >= len(values): showinfo("結果", f"全部題目做完了!\n您的最終得分為{score}分!") # 提示題目做完了,總結出你的得分 root.quit() # 程序退出 return # 顯示下一題 label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目 # 顯示4個選項 r1["text"] = values[num][1] r2["text"] = values[num][2] r3["text"] = values[num][3] r4["text"] = values[num][4] s.set('E') # 設置初始值為'E',初始沒選中 if __name__ == '__main__': root = tkinter.Tk() # 創(chuàng)建tkinter對象 root.title('垃圾分類答題考試') # 設置標題 root.geometry("500x200+500+300") # 設置頁面的位置和長寬 # 從題庫中隨機抽取10個題目作為考試題 values = random.sample(object_list,10) # 創(chuàng)建一個字符串變量用來記錄選項值 s = tkinter.StringVar() s.set('E') # 設置初始值為'E',初始沒選中 # 設置初始題號和分值 num = 0 score = 0 label = tkinter.Label(root, text=values[num][0]) # 用來顯示題目 label.pack() # 創(chuàng)建第 1 個 Frame 組件 f1 = Frame(root) f1.pack() r1 = tkinter.Radiobutton(f1, variable=s, value='A', text=values[num][1]) # 安裝第一個單選按鈕 r1.pack() r2 = tkinter.Radiobutton(f1, variable=s, value='B', text=values[num][2]) # 安裝第二個單選按鈕 r2.pack() r3 = tkinter.Radiobutton(f1, variable=s, value='C', text=values[num][3]) # 安裝第三個單選按鈕 r3.pack() r4 = tkinter.Radiobutton(f1, variable=s, value='D', text=values[num][4]) # 安裝第四個單選按鈕 r4.pack() # 創(chuàng)建第 2 個 Frame 組件 f2 = Frame(root) f2.pack() # 創(chuàng)建下一題的按鈕 Button(f2, text='下一題', command=lambda:main(values)).pack(side=LEFT) # 默認顯示第一道題目 label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目 # 顯示4個選項 r1["text"] = values[num][1] r2["text"] = values[num][2] r3["text"] = values[num][3] r4["text"] = values[num][4] root.mainloop()
到此這篇關于基于Tkinter實現(xiàn)的垃圾分類答題軟件代碼的文章就介紹到這了,更多相關Tkinter實現(xiàn)垃圾分類答題軟件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python使用celery實現(xiàn)異步任務執(zhí)行的例子
今天小編就為大家分享一篇python使用celery實現(xiàn)異步任務執(zhí)行的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08python3 tkinter實現(xiàn)添加圖片和文本
這篇文章主要為大家詳細介紹了python3 tkinter實現(xiàn)添加圖片和文本,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11