Maison  >  Article  >  développement back-end  >  Utiliser Python et Tkinter pour implémenter une application de réponse à la classification des déchets

Utiliser Python et Tkinter pour implémenter une application de réponse à la classification des déchets

WBOY
WBOYavant
2023-04-20 19:55:061275parcourir

    1. Tkinter

    Qu'est-ce que GUI

    L'interface utilisateur graphique (GUI en abrégé, également connue sous le nom d'interface utilisateur graphique) fait référence à une interface utilisateur d'exploitation informatique affichée graphiquement. Une interface utilisateur graphique est un format d'affichage d'interface pour la communication homme-machine qui permet aux utilisateurs d'utiliser des périphériques d'entrée tels qu'une souris pour manipuler des icônes ou des options de menu à l'écran afin de sélectionner des commandes, appeler des fichiers, démarrer des programmes ou effectuer d'autres tâches quotidiennes. Les interfaces utilisateur graphiques présentent de nombreux avantages par rapport aux interfaces de caractères dans lesquelles des commandes de texte ou de caractères sont saisies via le clavier pour effectuer des tâches de routine.

    L'interface utilisateur graphique se compose de fenêtres, de menus déroulants, de boîtes de dialogue et de leurs mécanismes de contrôle correspondants. Ils sont standardisés dans diverses nouvelles applications, c'est-à-dire que les mêmes opérations sont toujours effectuées de la même manière. , ce que les utilisateurs voient et exploitent sont des objets graphiques, et la technologie infographique est appliquée.

    La programmation GUI est similaire aux "blocs de construction", plaçant chaque composant (Widget) dans la fenêtre. Ce qui suit est un logiciel de dessin sous Windows, qui est un programme GUI typique :

    Utiliser Python et Tkinter pour implémenter une application de réponse à la classification des déchets

    Bibliothèques GUI couramment utilisées

    1 Tkinter

    tkinter (interface Tk) est la bibliothèque GUI standard de Python, prenant en charge l'interface graphique multiplateforme. Développement de programmes. tkinter convient à l'écriture de petits programmes GUI et convient particulièrement aux débutants qui souhaitent apprendre la programmation GUI. Cette fois, nous nous concentrerons sur tkinter.

    2. wxPython

    wxPython est une bibliothèque GUI populaire, adaptée au développement d'applications à grande échelle, avec des fonctions plus puissantes que tkinter, et le cadre de conception global est similaire à MFC (Microsoft Foundation Classes).

    3. PyQT

    Qt est une bibliothèque GUI open source adaptée au développement de programmes GUI à grande échelle. PyQT est l'implémentation Python standard de la boîte à outils Qt. Nous pouvons également utiliser le concepteur d'interface Qt Desginer pour développer rapidement des applications GUI.

    Un programme Tkinter le plus simple doit contenir au moins les quatre parties suivantes :

    • Importer le module tkinter

    • Créer la fenêtre principale, également appelée fenêtre racine (c'est-à-dire fenêtre racine)

    • Ajouter un humain -interaction informatique Contrôlez et écrivez la fonction événementielle correspondante en même temps

    • Affichez la fenêtre principale à travers la boucle principale

    2. Effet final

    Jetons d'abord un coup d'œil à l'effet final de ce projet :

    Utiliser Python et Tkinter pour implémenter une application de réponse à la classification des déchets

    Projet en cours Après cela, le programme sélectionnera au hasard 10 questions dans la banque de questions à tester. Lorsque vous répondez correctement ou incorrectement, une fenêtre contextuelle s'affichera. Chaque réponse correcte vaudra 10 points. Lorsque toutes les questions auront été répondues, il vous sera demandé que la question a été complétée et la note finale de cet examen vous sera demandée.

    3. Processus du projet

    3.1 Disposition de l'analyse

    Puisqu'il ne s'agit que d'un simple programme de réponse aux questions, la page globale n'a pas besoin d'être trop compliquée. Tout d'abord, une étiquette Étiquette est nécessaire pour afficher le titre de chaque question, puis il y a 4 boutons radio verticaux (ou horizontaux), et enfin un bouton de clic pour la question suivante est placé en dessous.

    3.2 Créer une fenêtre

    Pour réaliser n'importe quel projet, vous devez d'abord créer la fenêtre principale, également appelée fenêtre racine (c'est-à-dire fenêtre racine).

    # 导入本次项目用到的库
    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() # 让窗口一直显示出来

    L'effet est le suivant :

    Utiliser Python et Tkinter pour implémenter une application de réponse à la classification des déchets

    3.3 Construire une banque de questions

    Cette fois, je fais un programme de questions-réponses pour la classification des déchets, j'ai donc trouvé quelques questions sur la classification des déchets sur Internet. Ici, j'utilise directement des listes et des tuples pour stocker des données. Pour expliquer, le premier du tuple est la question, suivi des options ABCD et enfin des options de réponse pour cette question.

    # 准备一个题库列表
    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 Créer des composants

    Nous avons analysé la disposition de ce projet plus tôt. Nous avons besoin d'une note d'étiquette, de 4 boutons radio et d'un bouton de question suivante. Commençons maintenant à les placer dans la fenêtre principale. banque et affichez la première question.

    # 导入本次项目用到的库
    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() # 让窗口一直显示出来

    L'effet est le suivant :

    Utiliser Python et Tkinter pour implémenter une application de réponse à la classification des déchets

    Maintenant, il n'y a pas de réponse lorsque vous cliquez sur la question suivante, car à ce moment, seule la mise en page de la page a été implémentée, et la fonction de juger du bien ou du mal n’a pas encore été mise en œuvre.

    3.5 Fonction d'écriture d'événement

    La logique de l'événement est que lorsque vous cliquez sur le bouton de question suivante, le programme détermine si vos options pour cette question sont cohérentes avec les réponses de la banque de questions. Si elles sont égales, une fenêtre contextuelle apparaît. La fenêtre contextuelle vous indiquera que vous avez répondu correctement. S'ils ne sont pas égaux, une fenêtre contextuelle vous indiquera que la réponse est fausse. Une fois l'invite terminée, la question suivante sera affichée immédiatement. Après chaque jugement, il faut vérifier si la question est la dernière question. Si tel est le cas, arrêtez de répondre à la question et obtenez la note totale de ce test.

    # 定义一个判断选项正确性的函数
    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',初始没选中

    En même temps, vous devez également ajouter la fonction d'événement au bouton de question suivante

    Button(f2, text='下一题', command=lambda:main(values)).pack(side=LEFT)

    Une version simple du programme de réponse a été implémentée ici, et l'effet est comme indiqué précédemment.

    四、总结

    本次使用了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()

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer