搜尋
首頁後端開發Python教學使用Python和Tkinter實作一個垃圾分類答題應用程式

    一、Tkinter

    什麼是GUI

    圖形使用者介面(Graphical User Interface,簡稱GUI,又稱圖形使用者介面)是指採用圖形方式顯示的電腦操作使用者介面。圖形使用者介面是一種人與電腦通訊的介面顯示格式,允許使用者使用滑鼠等輸入裝置操縱螢幕上的圖示或選單選項,以選擇命令、呼叫檔案、啟動程式或執行其它一些日常任務。與透過鍵盤輸入文字或字元指令來完成例行任務的字元介面相比,圖形使用者介面有許多優點。

    圖形使用者介面由視窗、下拉式選單、對話方塊及其對應的控制機制構成,在各種新式應用程式中都是標準化的,即相同的操作總是以同樣的方式來完成,在圖形使用者介面,使用者看到和操作的都是圖形對象,應用的是電腦圖形學的技術。

    GUI 程式設計類似於“搭積木”,將一個個元件(Widget)放到視窗中。如下是windows 中的畫圖軟體,就是一個典型的GUI 程式:

    使用Python和Tkinter實作一個垃圾分類答題應用程式

    常用的GUI 函式庫

    ##1. Tkinter
    tkinter(Tk interface)是Python 的標準GUI 函式庫,支援跨平台的GUI 程式開發。 tkinter 適合小型的 GUI 程式編寫,也特別適合初學者學習 GUI 程式設計。本次以 tkinter 為核心進行講解。

    2. wxPython
    wxPython 是比較流行的 GUI 函式庫,適合大型應用程式開發,功能強於 tkinter,整體設計 框架類似 MFC(Microsoft Foundation Classes 微軟基礎類別庫)。

    3. PyQT
    Qt 是一種開源的 GUI 函式庫,適合大型 GUI 程式開發,PyQT 是 Qt 工具包標準的 Python 實作。我們也可以使用 Qt Desginer 介面設計器快速開發 GUI 應用程式 。

    一個最簡單的Tkinter 程式至少要包含以下四個部分:

    • 匯入tkinter 模組

    • ##建立主窗口,也稱為root 視窗(即根視窗)
    • 新增人機互動控件,同時編寫對應的事件函數
    • #透過主循環(mainloop)來顯示主視窗
    • 二、最終效果

    先來看看本次專案的最終效果:

    使用Python和Tkinter實作一個垃圾分類答題應用程式專案運行之後,程式會從題庫中隨機抽取10題目來測試,當你答對或答錯都會有彈窗提示,答對一道得10分,當題目全部答完後來會提示你題目已做完,並顯示你本次考試的最終得分。

    三、專案流程

    3.1分析佈局

    由於本次只是做一個簡易的答題程序,所以整體頁面不需要太複雜。首先,需要Label標籤來顯示每題的題目,接著就是4個垂直擺放(或橫向)單選框按鈕,最後下面放個下一題的點擊按鈕。

    3.2建立視窗

    做任何項目,都需要先建立主窗口,也稱為 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() # 让窗口一直显示出来

    效果如下:

    使用Python和Tkinter實作一個垃圾分類答題應用程式3.3建構題庫

    本次做的是垃圾分類的答題程序,所以我在網路上找了一些關於垃圾分類的題目。這裡我就直接用列表套元組的方式來儲存資料了。說明一下,元組中的第一個是題目,後面依序是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'), 
    ]

    3.4創建組件

    前面我們分析了本次項目的佈局情況,需要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() # 让窗口一直显示出来

    效果如下:

    使用Python和Tkinter實作一個垃圾分類答題應用程式現在你點擊下一題是沒有反應的,因為此時只是實現了頁面的佈局工作,還沒有實現判斷對錯的功能。

    3.5寫事件函數

    事件的邏輯是當你點擊下一題按鈕的時候,程式判斷你對本題的選項是否與題庫中的答案一致,如果相等,則透過彈跳窗的形式提示你答對了;如果不相等,則透過彈窗的形式提示你答錯了。提示完之後還要緊接著顯示下一題。每次判斷完之後都要檢測本題是否已經是最後一道題目,如果是則停止答題,得出本次測驗的總分。

    # 定义一个判断选项正确性的函数
    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實作一個垃圾分類答題應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

    详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

    Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

    归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

    分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

    VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

    python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

    pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

    Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

    详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

    本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前By尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    4 週前By尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )專業的PHP整合開發工具

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    Atom編輯器mac版下載

    Atom編輯器mac版下載

    最受歡迎的的開源編輯器