Python基于Tkinter實(shí)現(xiàn)的垃圾分類答題軟件代碼
一、Tkinter
什么是GUI
圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。圖形用戶界面是一種人與計(jì)算機(jī)通信的界面顯示格式,允許用戶使用鼠標(biāo)等輸入設(shè)備操縱屏幕上的圖標(biāo)或菜單選項(xiàng),以選擇命令、調(diào)用文件、啟動(dòng)程序或執(zhí)行其它一些日常任務(wù)。與通過鍵盤輸入文本或字符命令來完成例行任務(wù)的字符界面相比,圖形用戶界面有許多優(yōu)點(diǎn)。
圖形用戶界面由窗口、下拉菜單、對話框及其相應(yīng)的控制機(jī)制構(gòu)成,在各種新式應(yīng)用程序中都是標(biāo)準(zhǔn)化的,即相同的操作總是以同樣的方式來完成,在圖形用戶界面,用戶看到和操作的都是圖形對象,應(yīng)用的是計(jì)算機(jī)圖形學(xué)的技術(shù)。
GUI 編程類似于“搭積木”,將一個(gè)個(gè)組件(Widget)放到窗口中。如下是 windows 中的 畫圖軟件,就是一個(gè)典型的 GUI 程序:

常用的 GUI 庫
1. Tkinter
tkinter(Tk interface)是 Python 的標(biāo)準(zhǔn) GUI 庫,支持跨平臺(tái)的 GUI 程序開發(fā)。tkinter 適合小型的 GUI 程序編寫,也特別適合初學(xué)者學(xué)習(xí) GUI 編程。本次以 tkinter 為核心進(jìn)行講解。
2. wxPython
wxPython 是比較流行的 GUI 庫,適合大型應(yīng)用程序開發(fā),功能強(qiáng)于 tkinter,整體設(shè)計(jì) 框架類似于 MFC(Microsoft Foundation Classes 微軟基礎(chǔ)類庫)。
3. PyQT
Qt 是一種開源的 GUI 庫,適合大型 GUI 程序開發(fā),PyQT 是 Qt 工具包標(biāo)準(zhǔn)的 Python 實(shí)現(xiàn)。我們也可以使用 Qt Desginer 界面設(shè)計(jì)器快速開發(fā) GUI 應(yīng)用程序 。
一個(gè)最簡單的 Tkinter 程序至少應(yīng)包含以下四個(gè)部分:
- 導(dǎo)入 tkinter 模塊
- 創(chuàng)建主窗口,也稱 root 窗口(即根窗口)
- 添加人機(jī)交互控件,同時(shí)編寫相應(yīng)的事件函數(shù)
- 通過主循環(huán)(mainloop)來顯示主窗口
二、最終效果
先來看看本次項(xiàng)目的最終效果:


項(xiàng)目運(yùn)行之后,程序會(huì)從題庫中隨機(jī)抽取10道題目來測試,當(dāng)你答對或答錯(cuò)都會(huì)有彈窗提示,答對一道得10分,當(dāng)題目全部答完后會(huì)提示你題目已做完,并顯示你本次考試的最終得分。話不多說,開始上教程。
三、項(xiàng)目過程
3.1分析布局
由于本次只是做一個(gè)簡易的答題程序,所以整體頁面不需要太復(fù)雜。首先,需要Label標(biāo)簽來顯示每道題的題目,接著就是4個(gè)垂直擺放(或橫向)單選框按鈕,最后下面放個(gè)下一題的點(diǎn)擊按鈕。
3.2創(chuàng)建窗口
做任何項(xiàng)目,都需要先創(chuàng)建主窗口,也稱 root 窗口(即根窗口)。
# 導(dǎo)入本次項(xiàng)目用到的庫
import tkinter
from tkinter import *
from tkinter.messagebox import *
import random
if __name__ == '__main__':
root = tkinter.Tk() # 創(chuàng)建tkinter對象
root.title('垃圾分類答題考試') # 設(shè)置標(biāo)題
root.geometry("500x200+500+300") # 設(shè)置頁面的位置和長寬
root.mainloop() # 讓窗口一直顯示出來效果如下:

3.3構(gòu)建題庫
本次做的是垃圾分類的答題程序,所以我在網(wǎng)上找了一些關(guān)于垃圾分類的題目。這里我就直接用列表套元組的方式來存儲(chǔ)數(shù)據(jù)了。說明一下,元組中的第一個(gè)是題目,后面依次是ABCD選項(xiàng),最后是本題的答案選項(xiàng)。
# 準(zhǔn)備一個(gè)題庫列表
object_list = [
('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('茶葉渣應(yīng)扔進(jìn)哪個(gè)垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('吃剩的餅干渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('抽完煙的煙蒂是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('刀片屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('掉在地上的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('廢棄的食用油屬于?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('甘蔗渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('過期的化妝品是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('過期的貓糧屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('包裝藥片的鋁箔屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('喝茶剩下的茶葉渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('花生殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('壞掉的電腦屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('灰色塑料袋屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('回形針屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('雞骨頭屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('雞毛屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('家庭盆栽廢棄的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('堿性電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('膠卷屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('舊涼席屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('舊圖書屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('空的滅火器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('老舊電視機(jī)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('落發(fā)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('哪一類可進(jìn)行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('蘋果手機(jī)電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('染發(fā)劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('水銀溫度計(jì)屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('撕掉了的舊照片,應(yīng)該丟到哪個(gè)垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
]3.4創(chuàng)建組件
前面我們分析了本次項(xiàng)目的布局情況,需要1個(gè)Label便簽、4個(gè)單選按鈕、1個(gè)下一題按鈕,現(xiàn)在就開始將它們放置在主窗口中,從題庫中隨機(jī)抽取10道題目并顯示第一道題目。
# 導(dǎo)入本次項(xiàng)目用到的庫
import tkinter
from tkinter import *
from tkinter.messagebox import *
import random
# 準(zhǔn)備一個(gè)題庫列表
object_list = [
('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('茶葉渣應(yīng)扔進(jìn)哪個(gè)垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('吃剩的餅干渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('抽完煙的煙蒂是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('刀片屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('掉在地上的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('廢棄的食用油屬于?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('甘蔗渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('過期的化妝品是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('過期的貓糧屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('包裝藥片的鋁箔屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('喝茶剩下的茶葉渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('花生殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('壞掉的電腦屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('灰色塑料袋屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('回形針屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('雞骨頭屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('雞毛屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('家庭盆栽廢棄的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('堿性電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('膠卷屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('舊涼席屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('舊圖書屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('空的滅火器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('老舊電視機(jī)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('落發(fā)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('哪一類可進(jìn)行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('蘋果手機(jī)電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('染發(fā)劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('水銀溫度計(jì)屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('撕掉了的舊照片,應(yīng)該丟到哪個(gè)垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
]
if __name__ == '__main__':
root = tkinter.Tk() # 創(chuàng)建tkinter對象
root.title('垃圾分類答題考試') # 設(shè)置標(biāo)題
root.geometry("500x200+500+300") # 設(shè)置頁面的位置和長寬
# 從題庫中隨機(jī)抽取10個(gè)題目作為考試題
values = random.sample(object_list,10)
# 創(chuàng)建一個(gè)字符串變量用來記錄選項(xiàng)值
s = tkinter.StringVar()
s.set('E') # 設(shè)置初始值為'E',初始沒選中
# 設(shè)置初始題號(hào)和分值
num = 0
score = 0
label = tkinter.Label(root, text=values[num][0]) # 用來顯示題目
label.pack()
# 創(chuàng)建第 1 個(gè) Frame 組件
f1 = Frame(root)
f1.pack()
r1 = tkinter.Radiobutton(f1, variable=s, value='A', text=values[num][1]) # 安裝第一個(gè)單選按鈕
r1.pack()
r2 = tkinter.Radiobutton(f1, variable=s, value='B', text=values[num][2]) # 安裝第二個(gè)單選按鈕
r2.pack()
r3 = tkinter.Radiobutton(f1, variable=s, value='C', text=values[num][3]) # 安裝第三個(gè)單選按鈕
r3.pack()
r4 = tkinter.Radiobutton(f1, variable=s, value='D', text=values[num][4]) # 安裝第四個(gè)單選按鈕
r4.pack()
# 創(chuàng)建第 2 個(gè) Frame 組件
f2 = Frame(root)
f2.pack()
# 創(chuàng)建下一題的按鈕
Button(f2, text='下一題').pack(side=LEFT)
# 默認(rèn)顯示第一道題目
label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目
# 顯示4個(gè)選項(xiàng)
r1["text"] = values[num][1]
r2["text"] = values[num][2]
r3["text"] = values[num][3]
r4["text"] = values[num][4]
root.mainloop() # 讓窗口一直顯示出來效果如下:

現(xiàn)在你點(diǎn)擊下一題是沒有反應(yīng)的,因?yàn)榇藭r(shí)只是實(shí)現(xiàn)了頁面的布局工作,還沒有實(shí)現(xiàn)判斷對錯(cuò)的功能。
3.5編寫事件函數(shù)
事件的邏輯是當(dāng)你點(diǎn)擊下一題按鈕的時(shí)候,程序判斷你對本題的選項(xiàng)是否與題庫中的答案一致,如果相等,則通過彈窗的形式提示你答對了;如果不相等,則通過彈窗的形式提示你答錯(cuò)了。提示完之后還要緊接著顯示下一道題目。每次判斷完之后都要檢測本題是否已經(jīng)是最后一道題目,如果是則停止答題,得出本次測試的總得分。
# 定義一個(gè)判斷選項(xiàng)正確性的函數(shù)
def main(values):
# 全局引用num和score變量
global num
global score
# 如果選項(xiàng)和答案相等則答對了
if s.get() == values[num][5]:
showinfo("恭喜", "恭喜你答對了!") # 提示你答對了
score += 10 # 得分加10分
# 如果選項(xiàng)和答案不相等則答錯(cuò)了
else:
showinfo("遺憾", "遺憾你答錯(cuò)了!") # 提示你答錯(cuò)了
num = num + 1 # 記錄題號(hào)
# 如果題號(hào)已經(jīng)大于等于題目的總長度則需要進(jìn)行結(jié)束并統(tǒng)計(jì)總分?jǐn)?shù)
if num >= len(values):
showinfo("結(jié)果", f"全部題目做完了!\n您的最終得分為{score}分!") # 提示題目做完了,總結(jié)出你的得分
root.quit() # 程序退出
return
# 顯示下一題
label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目
# 顯示4個(gè)選項(xiàng)
r1["text"] = values[num][1]
r2["text"] = values[num][2]
r3["text"] = values[num][3]
r4["text"] = values[num][4]
s.set('E') # 設(shè)置初始值為'E',初始沒選中同時(shí)還需要在下一題按鈕那添加該事件函數(shù)
Button(f2, text='下一題', command=lambda:main(values)).pack(side=LEFT)
到這里一個(gè)簡易版的答題程序已經(jīng)實(shí)現(xiàn),效果如前面所示。
四、總結(jié)
本次使用了Python中的tkinter庫實(shí)現(xiàn)了一個(gè)簡易的垃圾分類答題程序,其中的題庫和各種參數(shù)大家可以發(fā)揮自己的創(chuàng)意,自行進(jìn)行修改,基于此源碼的基礎(chǔ)上創(chuàng)作出你的作品!
源代碼
# 導(dǎo)入本次項(xiàng)目用到的庫
import tkinter
from tkinter import *
from tkinter.messagebox import *
import random
# 準(zhǔn)備一個(gè)題庫列表
object_list = [
('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('茶葉渣應(yīng)扔進(jìn)哪個(gè)垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('吃剩的餅干渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('抽完煙的煙蒂是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('刀片屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('掉在地上的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('廢棄的食用油屬于?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('甘蔗渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('過期的化妝品是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('過期的貓糧屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('包裝藥片的鋁箔屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('喝茶剩下的茶葉渣是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('花生殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('壞掉的電腦屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('灰色塑料袋屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('回形針屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('雞骨頭屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('雞毛屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('家庭盆栽廢棄的樹葉是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('堿性電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('膠卷屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('舊涼席屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('舊圖書屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('空的滅火器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('老舊電視機(jī)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('落發(fā)屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('沒用完的鉛筆屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('沒有泡過的茶葉屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('哪一類可進(jìn)行資源再生利用?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('蘋果手機(jī)電池屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('破碎的碗碟屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('染發(fā)劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('殺蟲劑的容器屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('水果硬糖屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('水銀溫度計(jì)屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('撕掉了的舊照片,應(yīng)該丟到哪個(gè)垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
]
# 定義一個(gè)判斷選項(xiàng)正確性的函數(shù)
def main(values):
# 全局引用num和score變量
global num
global score
# 如果選項(xiàng)和答案相等則答對了
if s.get() == values[num][5]:
showinfo("恭喜", "恭喜你答對了!") # 提示你答對了
score += 10 # 得分加10分
# 如果選項(xiàng)和答案不相等則答錯(cuò)了
else:
showinfo("遺憾", "遺憾你答錯(cuò)了!") # 提示你答錯(cuò)了
num = num + 1 # 記錄題號(hào)
# 如果題號(hào)已經(jīng)大于等于題目的總長度則需要進(jìn)行結(jié)束并統(tǒng)計(jì)總分?jǐn)?shù)
if num >= len(values):
showinfo("結(jié)果", f"全部題目做完了!\n您的最終得分為{score}分!") # 提示題目做完了,總結(jié)出你的得分
root.quit() # 程序退出
return
# 顯示下一題
label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目
# 顯示4個(gè)選項(xiàng)
r1["text"] = values[num][1]
r2["text"] = values[num][2]
r3["text"] = values[num][3]
r4["text"] = values[num][4]
s.set('E') # 設(shè)置初始值為'E',初始沒選中
if __name__ == '__main__':
root = tkinter.Tk() # 創(chuàng)建tkinter對象
root.title('垃圾分類答題考試') # 設(shè)置標(biāo)題
root.geometry("500x200+500+300") # 設(shè)置頁面的位置和長寬
# 從題庫中隨機(jī)抽取10個(gè)題目作為考試題
values = random.sample(object_list,10)
# 創(chuàng)建一個(gè)字符串變量用來記錄選項(xiàng)值
s = tkinter.StringVar()
s.set('E') # 設(shè)置初始值為'E',初始沒選中
# 設(shè)置初始題號(hào)和分值
num = 0
score = 0
label = tkinter.Label(root, text=values[num][0]) # 用來顯示題目
label.pack()
# 創(chuàng)建第 1 個(gè) Frame 組件
f1 = Frame(root)
f1.pack()
r1 = tkinter.Radiobutton(f1, variable=s, value='A', text=values[num][1]) # 安裝第一個(gè)單選按鈕
r1.pack()
r2 = tkinter.Radiobutton(f1, variable=s, value='B', text=values[num][2]) # 安裝第二個(gè)單選按鈕
r2.pack()
r3 = tkinter.Radiobutton(f1, variable=s, value='C', text=values[num][3]) # 安裝第三個(gè)單選按鈕
r3.pack()
r4 = tkinter.Radiobutton(f1, variable=s, value='D', text=values[num][4]) # 安裝第四個(gè)單選按鈕
r4.pack()
# 創(chuàng)建第 2 個(gè) Frame 組件
f2 = Frame(root)
f2.pack()
# 創(chuàng)建下一題的按鈕
Button(f2, text='下一題', command=lambda:main(values)).pack(side=LEFT)
# 默認(rèn)顯示第一道題目
label["text"] = str(num+1) + '.' + values[num][0] # 顯示題目
# 顯示4個(gè)選項(xiàng)
r1["text"] = values[num][1]
r2["text"] = values[num][2]
r3["text"] = values[num][3]
r4["text"] = values[num][4]
root.mainloop()到此這篇關(guān)于基于Tkinter實(shí)現(xiàn)的垃圾分類答題軟件代碼的文章就介紹到這了,更多相關(guān)Tkinter實(shí)現(xiàn)垃圾分類答題軟件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對Python 獲取類的成員變量及臨時(shí)變量的方法詳解
今天小編就為大家分享一篇對Python 獲取類的成員變量及臨時(shí)變量的方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
解決jupyter notebook 前面書寫后面內(nèi)容消失的問題
這篇文章主要介紹了解決jupyter notebook 前面書寫后面內(nèi)容消失的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
nlp自然語言處理學(xué)習(xí)CBOW模型類實(shí)現(xiàn)示例解析
這篇文章主要為大家介紹了nlp自然語言處理學(xué)習(xí)CBOW模型類實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
Python控制臺(tái)實(shí)現(xiàn)交互式環(huán)境執(zhí)行
這篇文章主要介紹了Python程序如何在交互式環(huán)境中執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Django網(wǎng)絡(luò)框架之HelloDjango項(xiàng)目創(chuàng)建教程
這篇文章主要介紹了Django網(wǎng)絡(luò)框架之HelloDjango項(xiàng)目創(chuàng)建,結(jié)合實(shí)例形式詳細(xì)分析了Django框架創(chuàng)建HelloDjango項(xiàng)目的具體步驟與詳細(xì)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06
python3.x上post發(fā)送json數(shù)據(jù)
這篇文章通過代碼示例給大家講述了python3.x上post發(fā)送json數(shù)據(jù)的詳細(xì)方法,一起學(xué)習(xí)下。2018-03-03

