您好,登錄后才能下訂單哦!
這篇“Python基于Tkinter怎么實現垃圾分類答題軟件”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python基于Tkinter怎么實現垃圾分類答題軟件”文章吧。
圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。圖形用戶界面是一種人與計算機通信的界面顯示格式,允許用戶使用鼠標等輸入設備操縱屏幕上的圖標或菜單選項,以選擇命令、調用文件、啟動程序或執行其它一些日常任務。與通過鍵盤輸入文本或字符命令來完成例行任務的字符界面相比,圖形用戶界面有許多優點。
圖形用戶界面由窗口、下拉菜單、對話框及其相應的控制機制構成,在各種新式應用程序中都是標準化的,即相同的操作總是以同樣的方式來完成,在圖形用戶界面,用戶看到和操作的都是圖形對象,應用的是計算機圖形學的技術。
GUI 編程類似于“搭積木”,將一個個組件(Widget)放到窗口中。如下是 windows 中的 畫圖軟件,就是一個典型的 GUI 程序:
tkinter(Tk interface)是 Python 的標準 GUI 庫,支持跨平臺的 GUI 程序開發。tkinter 適合小型的 GUI 程序編寫,也特別適合初學者學習 GUI 編程。本次以 tkinter 為核心進行講解。
wxPython 是比較流行的 GUI 庫,適合大型應用程序開發,功能強于 tkinter,整體設計 框架類似于 MFC(Microsoft Foundation Classes 微軟基礎類庫)。
Qt 是一種開源的 GUI 庫,適合大型 GUI 程序開發,PyQT 是 Qt 工具包標準的 Python 實現。我們也可以使用 Qt Desginer 界面設計器快速開發 GUI 應用程序 。
一個最簡單的 Tkinter 程序至少應包含以下四個部分:
導入 tkinter 模塊
創建主窗口,也稱 root 窗口(即根窗口)
添加人機交互控件,同時編寫相應的事件函數
通過主循環(mainloop)來顯示主窗口
先來看看本次項目的最終效果:
項目運行之后,程序會從題庫中隨機抽取10道題目來測試,當你答對或答錯都會有彈窗提示,答對一道得10分,當題目全部答完后會提示你題目已做完,并顯示你本次考試的最終得分。
由于本次只是做一個簡易的答題程序,所以整體頁面不需要太復雜。首先,需要Label標簽來顯示每道題的題目,接著就是4個垂直擺放(或橫向)單選框按鈕,最后下面放個下一題的點擊按鈕。
做任何項目,都需要先創建主窗口,也稱 root 窗口(即根窗口)。
# 導入本次項目用到的庫 import tkinter from tkinter import * from tkinter.messagebox import * import random if __name__ == '__main__': root = tkinter.Tk() # 創建tkinter對象 root.title('垃圾分類答題考試') # 設置標題 root.geometry("500x200+500+300") # 設置頁面的位置和長寬 root.mainloop() # 讓窗口一直顯示出來
效果如下:
本次做的是垃圾分類的答題程序,所以我在網上找了一些關于垃圾分類的題目。這里我就直接用列表套元組的方式來存儲數據了。說明一下,元組中的第一個是題目,后面依次是ABCD選項,最后是本題的答案選項。
# 準備一個題庫列表 object_list = [ ('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('變質的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', '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'), ('落發屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('哪一類可進行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('蘋果手機電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('染發劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('水銀溫度計屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('撕掉了的舊照片,應該丟到哪個垃圾桶內?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ]
前面我們分析了本次項目的布局情況,需要1個Label便簽、4個單選按鈕、1個下一題按鈕,現在就開始將它們放置在主窗口中,從題庫中隨機抽取10道題目并顯示第一道題目。
# 導入本次項目用到的庫 import tkinter from tkinter import * from tkinter.messagebox import * import random # 準備一個題庫列表 object_list = [ ('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('變質的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', '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'), ('落發屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('哪一類可進行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('蘋果手機電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('染發劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('水銀溫度計屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('撕掉了的舊照片,應該丟到哪個垃圾桶內?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ] if __name__ == '__main__': root = tkinter.Tk() # 創建tkinter對象 root.title('垃圾分類答題考試') # 設置標題 root.geometry("500x200+500+300") # 設置頁面的位置和長寬 # 從題庫中隨機抽取10個題目作為考試題 values = random.sample(object_list,10) # 創建一個字符串變量用來記錄選項值 s = tkinter.StringVar() s.set('E') # 設置初始值為'E',初始沒選中 # 設置初始題號和分值 num = 0 score = 0 label = tkinter.Label(root, text=values[num][0]) # 用來顯示題目 label.pack() # 創建第 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() # 創建第 2 個 Frame 組件 f2 = Frame(root) f2.pack() # 創建下一題的按鈕 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() # 讓窗口一直顯示出來
效果如下:
現在你點擊下一題是沒有反應的,因為此時只是實現了頁面的布局工作,還沒有實現判斷對錯的功能。
事件的邏輯是當你點擊下一題按鈕的時候,程序判斷你對本題的選項是否與題庫中的答案一致,如果相等,則通過彈窗的形式提示你答對了;如果不相等,則通過彈窗的形式提示你答錯了。提示完之后還要緊接著顯示下一道題目。每次判斷完之后都要檢測本題是否已經是最后一道題目,如果是則停止答題,得出本次測試的總得分。
# 定義一個判斷選項正確性的函數 def main(values): # 全局引用num和score變量 global num global score # 如果選項和答案相等則答對了 if s.get() == values[num][5]: showinfo("恭喜", "恭喜你答對了!") # 提示你答對了 score += 10 # 得分加10分 # 如果選項和答案不相等則答錯了 else: showinfo("遺憾", "遺憾你答錯了!") # 提示你答錯了 num = num + 1 # 記錄題號 # 如果題號已經大于等于題目的總長度則需要進行結束并統計總分數 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',初始沒選中
同時還需要在下一題按鈕那添加該事件函數
Button(f2, text='下一題', command=lambda:main(values)).pack(side=LEFT)
到這里一個簡易版的答題程序已經實現,效果如前面所示。
本次使用了Python中的tkinter庫實現了一個簡易的垃圾分類答題程序,其中的題庫和各種參數大家可以發揮自己的創意,自行進行修改,基于此源碼的基礎上創作出你的作品!
源代碼
# 導入本次項目用到的庫 import tkinter from tkinter import * from tkinter.messagebox import * import random # 準備一個題庫列表 object_list = [ ('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('變質的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', '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'), ('落發屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('哪一類可進行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('蘋果手機電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('染發劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ('水銀溫度計屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('撕掉了的舊照片,應該丟到哪個垃圾桶內?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'), ('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'), ('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'), ('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'), ] # 定義一個判斷選項正確性的函數 def main(values): # 全局引用num和score變量 global num global score # 如果選項和答案相等則答對了 if s.get() == values[num][5]: showinfo("恭喜", "恭喜你答對了!") # 提示你答對了 score += 10 # 得分加10分 # 如果選項和答案不相等則答錯了 else: showinfo("遺憾", "遺憾你答錯了!") # 提示你答錯了 num = num + 1 # 記錄題號 # 如果題號已經大于等于題目的總長度則需要進行結束并統計總分數 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() # 創建tkinter對象 root.title('垃圾分類答題考試') # 設置標題 root.geometry("500x200+500+300") # 設置頁面的位置和長寬 # 從題庫中隨機抽取10個題目作為考試題 values = random.sample(object_list,10) # 創建一個字符串變量用來記錄選項值 s = tkinter.StringVar() s.set('E') # 設置初始值為'E',初始沒選中 # 設置初始題號和分值 num = 0 score = 0 label = tkinter.Label(root, text=values[num][0]) # 用來顯示題目 label.pack() # 創建第 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() # 創建第 2 個 Frame 組件 f2 = Frame(root) f2.pack() # 創建下一題的按鈕 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()
以上就是關于“Python基于Tkinter怎么實現垃圾分類答題軟件”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。