???♂? 個人主頁:@艾派森的個人主頁
???作者簡介:Python學(xué)習(xí)者
?? 希望大家多多支持,我們一起進步!??
如果文章對你有幫助的話,
歡迎評論 ??點贊???? 收藏 ??加關(guān)注+
目錄
一、Tkinter
二、最終效果
三、項目過程
3.1分析布局
3.2創(chuàng)建窗口
3.3構(gòu)建題庫
3.4創(chuàng)建組件
3.5編寫事件函數(shù)
四、總結(jié)
源代碼
?
一、Tkinter
什么是GUI
? ? ? ? 圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。圖形用戶界面是一種人與計算機通信的界面顯示格式,允許用戶使用鼠標(biāo)等輸入設(shè)備操縱屏幕上的圖標(biāo)或菜單選項,以選擇命令、調(diào)用文件、啟動程序或執(zhí)行其它一些日常任務(wù)。與通過鍵盤輸入文本或字符命令來完成例行任務(wù)的字符界面相比,圖形用戶界面有許多優(yōu)點。圖形用戶界面由窗口、下拉菜單、對話框及其相應(yīng)的控制機制構(gòu)成,在各種新式應(yīng)用程序中都是標(biāo)準(zhǔn)化的,即相同的操作總是以同樣的方式來完成,在圖形用戶界面,用戶看到和操作的都是圖形對象,應(yīng)用的是計算機圖形學(xué)的技術(shù)。
? ? ? ? GUI 編程類似于“搭積木”,將一個個組件(Widget)放到窗口中。如下是 windows 中的 畫圖軟件,就是一個典型的 GUI 程序:
常用的 GUI 庫
1. Tkinter
????????tkinter(Tk interface)是 Python 的標(biāo)準(zhǔn) GUI 庫,支持跨平臺的 GUI 程序開發(fā)。tkinter 適合小型的 GUI 程序編寫,也特別適合初學(xué)者學(xué)習(xí) GUI 編程。本次以 tkinter 為核心進行講解。關(guān)于Tkinter基礎(chǔ)知識可參考Tkinter保姆級教程(上)和Tkinter保姆級教程(下)
2. wxPython
????????wxPython 是比較流行的 GUI 庫,適合大型應(yīng)用程序開發(fā),功能強于 tkinter,整體設(shè)計 框架類似于 MFC(Microsoft Foundation Classes 微軟基礎(chǔ)類庫)。
3. PyQT
????????Qt 是一種開源的 GUI 庫,適合大型 GUI 程序開發(fā),PyQT 是 Qt 工具包標(biāo)準(zhǔn)的 Python 實現(xiàn)。我們也可以使用 Qt Desginer 界面設(shè)計器快速開發(fā) GUI 應(yīng)用程序 。
一個最簡單的 Tkinter 程序至少應(yīng)包含以下四個部分:
- 導(dǎo)入 tkinter 模塊
- 創(chuàng)建主窗口,也稱 root 窗口(即根窗口)
- 添加人機交互控件,同時編寫相應(yīng)的事件函數(shù)
- 通過主循環(huán)(mainloop)來顯示主窗口
二、最終效果
先來看看本次項目的最終效果:
????????項目運行之后,程序會從題庫中隨機抽取10道題目來測試,當(dāng)你答對或答錯都會有彈窗提示,答對一道得10分,當(dāng)題目全部答完后會提示你題目已做完,并顯示你本次考試的最終得分。話不多說,開始上教程。
三、項目過程
3.1分析布局
????????由于本次只是做一個簡易的答題程序,所以整體頁面不需要太復(fù)雜。首先,需要Label標(biāo)簽來顯示每道題的題目,接著就是4個垂直擺放(或橫向)單選框按鈕,最后下面放個下一題的點擊按鈕。
3.2創(chuàng)建窗口
做任何項目,都需要先創(chuàng)建主窗口,也稱 root 窗口(即根窗口)。
# 導(dǎo)入本次項目用到的庫
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)于垃圾分類的題目。這里我就直接用列表套元組的方式來存儲數(shù)據(jù)了。說明一下,元組中的第一個是題目,后面依次是ABCD選項,最后是本題的答案選項。
# 準(zhǔn)備一個題庫列表
object_list = [
('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('茶葉渣應(yīng)扔進哪個垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', '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'),
('撕掉了的舊照片,應(yīng)該丟到哪個垃圾桶內(nèi)?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'B'),
('塑料筷子屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('塑料玩具是什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('糖果包裝紙屬于什么垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('西瓜籽屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
]
3.4創(chuàng)建組件
????????前面我們分析了本次項目的布局情況,需要1個Label便簽、4個單選按鈕、1個下一題按鈕,現(xiàn)在就開始將它們放置在主窗口中,從題庫中隨機抽取10道題目并顯示第一道題目。
# 導(dǎo)入本次項目用到的庫
import tkinter
from tkinter import *
from tkinter.messagebox import *
import random
# 準(zhǔn)備一個題庫列表
object_list = [
('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('茶葉渣應(yīng)扔進哪個垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', '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'),
('撕掉了的舊照片,應(yīng)該丟到哪個垃圾桶內(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è)置頁面的位置和長寬
# 從題庫中隨機抽取10個題目作為考試題
values = random.sample(object_list,10)
# 創(chuàng)建一個字符串變量用來記錄選項值
s = tkinter.StringVar()
s.set('E') # 設(shè)置初始值為'E',初始沒選中
# 設(shè)置初始題號和分值
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)
# 默認(rèn)顯示第一道題目
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)在你點擊下一題是沒有反應(yīng)的,因為此時只是實現(xiàn)了頁面的布局工作,還沒有實現(xiàn)判斷對錯的功能。
3.5編寫事件函數(shù)
????????事件的邏輯是當(dāng)你點擊下一題按鈕的時候,程序判斷你對本題的選項是否與題庫中的答案一致,如果相等,則通過彈窗的形式提示你答對了;如果不相等,則通過彈窗的形式提示你答錯了。提示完之后還要緊接著顯示下一道題目。每次判斷完之后都要檢測本題是否已經(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)大于等于題目的總長度則需要進行結(jié)束并統(tǒng)計總分?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個選項
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ù)
Button(f2, text='下一題', command=lambda:main(values)).pack(side=LEFT)
到這里一個簡易版的答題程序已經(jīng)實現(xiàn),效果如前面所示。
四、總結(jié)
? ? ? ? 本次使用了Python中的tkinter庫實現(xiàn)了一個簡易的垃圾分類答題程序,其中的題庫和各種參數(shù)大家可以發(fā)揮自己的創(chuàng)意,自行進行修改,基于此源碼的基礎(chǔ)上創(chuàng)作出你的作品!文章來源:http://www.zghlxwxcb.cn/news/detail-811296.html
源代碼
# 導(dǎo)入本次項目用到的庫
import tkinter
from tkinter import *
from tkinter.messagebox import *
import random
# 準(zhǔn)備一個題庫列表
object_list = [
('包了口香糖的紙巾屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('保鮮膜屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'A'),
('變質(zhì)的香腸屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('檳榔渣屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('剝掉的蛋殼屬于哪一類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'D'),
('菜刀屬于哪類垃圾?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', 'C'),
('茶葉渣應(yīng)扔進哪個垃圾桶?', '其他垃圾', '有害垃圾', '可回收物', '廚余垃圾', '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'),
('撕掉了的舊照片,應(yīng)該丟到哪個垃圾桶內(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)大于等于題目的總長度則需要進行結(jié)束并統(tǒng)計總分?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個選項
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è)置頁面的位置和長寬
# 從題庫中隨機抽取10個題目作為考試題
values = random.sample(object_list,10)
# 創(chuàng)建一個字符串變量用來記錄選項值
s = tkinter.StringVar()
s.set('E') # 設(shè)置初始值為'E',初始沒選中
# 設(shè)置初始題號和分值
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)
# 默認(rèn)顯示第一道題目
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()
?文章來源地址http://www.zghlxwxcb.cn/news/detail-811296.html
到了這里,關(guān)于基于Tkinter實現(xiàn)一個垃圾分類答題軟件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!