前言
今天给大家介绍Python实现课堂随机抽选提问并语音播报学生姓名实战案例,废话不多说直接开整~
开发工具
Python版本: 3.8
相关模块:
tkinter模块
time模块
random模块
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
核心功能设计
总体来说,我们这款课堂点名器实现的思路大致是,可以自定义设置班级学生姓名或者默认通过学号进行学生随机点名抽取,随机抽取到的学生将以语音播报的形式进行展示出来。
拆解需求,接下来我们可以通过以下几步进行实现:
排版布局设计
读取学生名单,如果不存在文件就使用模拟数据
随机打乱学生名单
实现对学生姓名的随机点名抽取语音播报功能
用来滚动显示学生名单
win32con模块安装
python -m pip install pypiwin32
排版布局设计
根据点名器所需要的功能,首先我们可以进行排版布局设计,我们这次主要使用TKinter模块。主要包含了读取学生名单,如果不存在文件就使用模拟数据、随机打乱学生名单、实现对学生姓名的随机点名抽取语音播报功能、用来滚动显示学生名单等。
核心设计代码
root = tkinter.Tk()
# 窗口标题
root.title('随机提问')
# 窗口初始大小和位置
root.geometry('260x180+400+300')
# 不允许改变窗口大小
root.resizable(False, False)
# 关闭程序时执行的函数代码,停止滚动显示学生名单
def closeWindow():
if rolling.get():
showinfo('不能关闭', '请先停止名单滚动')
return
root.destroy()
root.protocol('WM_DELETE_WINDOW', closeWindow)
# 读取学生名单,如果不存在文件就使用模拟数据
try:
with open('学生名单.txt', encoding='utf8') as fp:
students = fp.read().splitlines()
except:
showinfo('学生名单不存在',
'当前目录中没有文件:学生名单.txt\n临时使用模拟数据')
students = ['周楚暮', '金夜羽', '乐天晟', '端圣夜', '司翊旋', '上官冽']
# 变量,用来控制是否滚动显示学生名单
rolling = tkinter.BooleanVar(root, value=False)
def switch():
rolling.set(True)
# 随机打乱学生名单
t = students[:]
shuffle(t)
t = cycle(t)
while rolling.get():
# 滚动显示
lbFirst['text'] = lbSecond['text']
lbSecond['text'] = lbThird['text']
lbThird['text'] = next(t)
# 数字可以修改,控制滚动速度
sleep(0.1)
def btnStartClick():
# 每次单击“开始”按钮启动新线程
Thread(target=switch).start()
btnStart['state'] = 'disabled'
btnStop['state'] = 'normal'
btnStart = tkinter.Button(root,
text='开始',
command=btnStartClick)
btnStart.place(x=30, y=10, width=80, height=20)
saying = tkinter.BooleanVar(root, value=False)
def say_name():
while has_speech and saying.get():
say(f"请{lbSecond['text'].replace(',','')}回答问题")
def btnStopClick():
# 单击“停”按钮结束滚动显示
rolling.set(False)
sleep(0.3)
saying.set(True)
Thread(target=say_name).start()
showinfo('恭喜', '本次中奖:'+lbSecond['text'])
saying.set(False)
btnStart['state'] = 'normal'
btnStop['state'] = 'disabled'
btnStop = tkinter.Button(root, text='停', command=btnStopClick)
btnStop['state'] = 'disabled'
btnStop.place(x=150, y=10, width=80, height=20)
# 用来滚动显示学生名单的3个Label组件
# 可以根据需要进行添加,但要修改上面的线程函数代码
lbFirst = tkinter.Label(root, text='')
lbFirst.place(x=80, y=60, width=100, height=20)
运行结果
最后
为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。
里面有适合小白新手的Python实战教程给到大家~
快来和小鱼一起成长进步吧!
① 100+多本PythonPDF(主流和经典的书籍应该都有了)
② Python标准库(最全中文版)
③ 爬虫项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)