python3 tkinter 随机答题

这篇博客介绍了一个基于Python3的tkinter库构建的随机答题小工具,详细注释了源码,包括如何从Excel文件读取题目并进行随机显示。此外,还提到了如何使用pyinstaller将程序编译为exe可执行文件,并添加了倒计时结束声音以及读取Excel数据的openpyxl库。
摘要由CSDN通过智能技术生成

基于tkinter的随机答题小工具,附带详细的注释

通过pyinstaller可以编译为可执行的exe

pip install pyinstaller

 以下命令将main.py编译为单个执行的exe

pyinstaller -F -w -i lg.ico main.py

需要一个lg.ico图标exe放到同级目录(编译后的dist文件夹)

还需要一个 end.wav声音文件(倒计时结束声音)放到同级目录

声音播放基于playsound

pip install playsound

以下为main.py源码 做了详细的注释:

"""
随机答题
读取excel表格中的问题与解析随机抽取
实现了重复随机|去重随机
实现了自动倒计时|手动倒计时
第三方库
excel操作PfExcel基于openpyxl由作者二次封装(上个博客中有介绍)
声音播放基于playsound
"""
from time import sleep
from random import randint
from threading import Thread
from tkinter import (Tk,
                     Button,
                     Toplevel,
                     Menu,
                     IntVar,
                     filedialog,
                     messagebox,
                     DISABLED,
                     Frame,
                     StringVar,
                     NORMAL,
                     END,
                     GROOVE,
                     Entry)
from tkinter.scrolledtext import ScrolledText

from playsound import playsound
from PfExcel import ExcelWork


class Window(Tk):

    def __init__(self):
        super().__init__()

        # 随机选项 0:不重复 | 1:重复
        self.repetitive = IntVar()
        self.repetitive.set(0)

        # 倒计时选项 0:手动 | 1:自动
        self.autoCountdown = IntVar()
        self.autoCountdown.set(1)
        # 倒计时运行状态
        self.countdownNow = False

        # 题库地址
        self.filePath = ''
        # 问题数据
        self.askList = []
        # 解析数据
        self.keyList = []

        # ui初始化
        self.guiInit()

        # 菜单栏
        self.menu()

        # 解析值
        self.keyValue = ''
        # 问题栏
        self.askTextObj = self.askText()

        # 倒计时数值
        self.countdownNum = 15
        # 倒计时按钮的标签值
        self.countdownStr = StringVar()
        # 设置倒计时按钮的标签值为倒计时
        self.countdownStr.set('倒计时')
        # 倒计时栏
        self.countdown()

        # 随机按钮的标签值
        self.randomStart = StringVar()
        # 设置随机随机按钮的标签值为开始
        self.randomStart.set('开始')
        # 控制栏
        self.control()

    def show(self):
        """
        展示窗口
        :return:
        """
        self.mainloop()

    def guiInit(self):
        """
        主窗口初始化
        :return:
        """
        # 窗口宽高
        width = 1200
        height = 810
        # 主屏幕宽高
        mainWidth = self.winfo_screenwidth()
        mainHeight = self.winfo_screenheight()
        # 设置窗口大小与显示位置
        self.geometry(f'{width}x{height}+{int((mainWidth - width) / 2)}+{int((mainHeight - height) / 2)}')
        # 禁止窗口缩放
        self.resizable(0, 0)
        # 标题
        self.title("随机答题")
        # 图标
        self.iconbitmap("lg.ico")

    def menu(self):
        """
        菜单栏
        :return:
        """
        menubar = Menu(self)
        # 操作
        operate = Menu(menubar, tearoff=0)
        menubar.add_cascade(label="操作", menu=operate)
        operate.add_command(label='选择题库', command=self.selectQb)
        operate.add_command(label='倒计时设置', command=self.setCountdownNum)
        operate.add_separator()
        operate.add_radiobutton(label='重复随机', variable=self.repetitive, value=1)
        operate.add_radiobutton(label='去重随机', variable=self.repetiti
实现一个模拟考试系统,用户可以选择顺序答题或者随机答题的功能。系统可以根据用户选择的模式展示题目,并记录用户的答题情况。顺序答题功能:用户可以选择顺序答题模式,在界面上逐个展示题目,用户按照顺序回答每个题目。系统会记录用户的答题顺序和答题情况。随机答题功能:用户可以选择随机答题模式,系统会随机展示题目,用户可以按任意顺序回答题目。系统会记录用户的答题顺序和答题情况。答题记录:系统会记录用户的答题情况,包括用户选择的答案、正确答案等信息。用户可以随时查看自己的答题记录。自动评分:系统可以根据用户的答题情况自动评分,给出答题结果和得分情况。用户可以及时了解自己的答题情况。提示功能:系统可以根据用户的答题情况给出相应的提示,帮助用户更好地理解题目和知识点。用户交互:系统可以与用户交互,提供友好的提示和指导,确保用户操作顺利,并且可以根据用户反馈不断优化系统。通过实现顺序答题随机答题功能,模拟考试系统可以提供不同的答题体验,让用户可以根据自己的需求选择合适的答题方式。这样的系统可以帮助用户更好地备战考试,提高学习效率,提供个性化的学习体验。可以帮助用户更好理解题目。根据用户反馈不断优化系统。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值