前言

今天给大家介绍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('不能关闭', '请先停止名单滚动')returnroot.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学习路线图(告别不入流的学习)

Python实战案例,tkinter+random模块,实现课堂随机抽选提问并语音播报学生姓名相关推荐

  1. Python实现课堂随机提问并语音播报学生姓名!辅导员开心极了!

    功能描述: 读取文本文件中的学生学号和姓名,然后单击按钮"开始"在界面上滚动名单,单击按钮"停"停止滚动并语音提示"请***回答问题". 1 ...

  2. Python实现课堂随机提问并语音播报学生姓名

    开学第一课:拜托,一定不要这样问Python问题 Python小屋刷题神器最近升级的新功能介绍 推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国 ...

  3. Python实战案例,pygame模块,Python实现套路表白神器VS无套路表白神器

    前言 利用Python实现套路表白神器VS无套路表白神器.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pygame模块: random模块 sys模块: ...

  4. Python实战案例,PyQt5模块,实现疫情信息快速查看工具(附源码)

    前言 今天给大家介绍的是Python疫情信息快速查看工具,在这里给需要的小伙伴们代码,并且给出一点小心得. PyQt概述 PyQt5是Qt框架的Python语言实现,由Riverbank Comput ...

  5. Python实战案例,pywifi模块,Python暴力破译附近局域网WiFi密码

    前言 今天带大家Python 脚本实现 WIFI 密码的破译,废话不多说,直接开始~ 开发工具 Python版本: 3.6.4 相关模块: pywifi模块: datetime模块: 以及一些Pyth ...

  6. Python实战案例,pyecharts模块,Python实现5G数据

    前言 利用Python实现5G 手机价格 及芯片.5G下载网速,5G网络城市数据可视化,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pyecharts模块 ...

  7. Python实战案例,requests模块,Python实现获取动态图表

    前言 利用Python实现获取动态图表,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re模块: requests模块: urllib模块: pandas模 ...

  8. Python实战案例,CV2模块,Python实现抖音字符视频

    前言 利用Python实现抖音字符视频.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块: PIL模块: numpy模块: 以及一些Python自带 ...

  9. Python实战案例,requests模块,Python实现模拟登录淘宝网

    前言 利用利用Python模拟登录淘宝网.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re模块 os模块 requests模块: 以及一些Python自带 ...

最新文章

  1. 青源 LIVE 预告 | 复旦大学:NLP 的范式迁移
  2. nodejs下载安装教程(XP版)
  3. of python检索文献 science web_硕博士都在学的Python神技,有大神带!
  4. IDEA 真牛逼,900行 又臭又长 的类重构,几分钟搞定
  5. 通过反射获取无参无返回值成员方法并使用
  6. 计算机安全专家建议:尽快为电脑升级打补丁
  7. PHP----学生管理系统
  8. android程序获取WIFI的IP地址和MAC地址
  9. java list翻转_JAVA实现两种方法反转单列表
  10. HDU5150 Sum Sum Sum
  11. 深度linux添加xp,Linux和Windos XP下向路由表添加路由
  12. python learning1.py
  13. html鼠标互动旋转立方体,css3 transform及原生js实现鼠标拖动3D立方体旋转的示例介绍...
  14. java邮箱和手机发送链接和验证码_java发送邮箱验证码
  15. GIS应用技巧之利用DEM制作三维立体图
  16. 产业分析:东方甄选vs罗永浩直播间
  17. java中IOException是什么异常
  18. 联想拯救者15isk清灰_拯救者15值得买吗?联想拯救者15isk游戏本全面深度评测图解...
  19. 括弧匹配检验(括号匹配问题)
  20. 基于R语言对股市价格预测的ARIMA建模

热门文章

  1. MM32射频解码(产品检验,可靠稳定)
  2. 【三】3D匹配Matching之可变形曲面匹配Deformable Surface—Based——deserialize_deformable_surface_model()算子
  3. 手机钢琴键盘模拟器好用吗?
  4. 温室大棚风机湿帘强制降温系统原理
  5. 大气遥感中的方位角和散射角
  6. imx6dl系统每次启动MAC地址都不一样
  7. SVM学习(五):松弛变量与惩罚因子
  8. Esp8266的编译环境搭建和打印一个hellow wold程序
  9. 蹒跚学步,走出Scala的下一步
  10. Unity学习笔记5:2D坦克大战