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

news2024/11/18 21:38:44

前言

今天给大家介绍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学习路线图(告别不入流的学习)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计ssm+vue基本微信小程序的琴房管理系统 uniapp 小程序

项目介绍 随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,钢琴培训企业各种管理系统层出不穷,为钢琴培训企业琴房管理开发必要的系统,能够有效的提升管理效率。一直以来,钢琴培训企业琴房预约一直没有进行系统化的管理,学生无…

sharing-jdbc-1-5.x版本应用

1总结 2:详解 运行模式 :: ShardingSphere 用户手册,开发手册。这俩比较重要 spring.shardingsphere.mode.type 默认内存模式 3官网案例 不同的依赖坐标,配置方式不一样。按照官网的配置来一步一步配置。 4 整合springboot方式 行表达式 :…

【JS】postMessage 用法(可以给iframe传值)

文章目录基本概念代码案例基本概念 跨文档消息,有时候也简称为XDM(cross-document messaging) 是一种在不同执行上下文(如不同源的页面)间传递信息的能力。例如:www.wrox.com上的页面想要与包含在内嵌窗格中的p2p.wrox.com上面的页…

第一个Spring Boot程序

⭐️前言⭐️ 本文主要介绍Spring Boot项目的创建流程,及Spring Boot项目目录的一些注意事项。 🍉博客主页: 🍁【如风暖阳】🍁 🍉精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】 &…

JAVA SCRIPT设计模式--行为型--设计模式之Command命令模式(14)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能,所以不可能像C,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVA SCRIPT代码,代码只是实现了设计模式的主体功能,不代…

服务器硬件规格常用查看命令——CPU相关命令

使用lscpu 命令可以从sysfs和/proc/cpuinfo中收集CPU体系结构信息,并解析优化为易阅读的格式。该信息包括:CPU的线程、核心、套接字数量和非一致内存访问(NUMA)节点的数量,以及CPU缓存、共享缓存、系列、型号等信息。 …

英文写作—Grammarly安装及下载

Grammarly是一款在线语法纠正和校对工具,支持Windows、Mac、iOS和Android等多个平台。 主要功能包括检查单词拼写、纠正标点符号、修正语法错误、调整语气以及给出风格建议等;对学术写作来说,Grammarly还可以帮助查重。 登陆界面&#xff1a…

每日一题:折半查找法,二分查找法

每日一题:折半查找法,二分查找法每日一题:折半查找法,二分查找法二分查找法定义:代码1:代码2:每日一题:折半查找法,二分查找法 ​ 💖💖个人博客:比…

SpringBoot之自定义注解

目录 1.java注解简介 1.1.java注解分类 1.1.1.JDK基本注解 1.1.2.JDK元注解 1.1.3.自定义注解 1.1.4 在这里如何自定义注解? 2、自定义注解 3.Aop应用自定义注解 1.java注解简介 Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解…

可靠性udp传输大文件

高级计算机网络大作业-可靠性udp传输大文件实验数据zstd压缩1G文件(延迟100ms、丢包1%)0.1G文件(延迟100ms、丢包1%)0.01G文件(延迟100ms、丢包1%)多线程lzma压缩1G文件(延迟100ms、丢包1%&…

N子棋(外加双人对战)详解!推荐!!!

文章目录准备工作创建菜单进入游戏初始化棋盘、打印棋盘玩家下棋、电脑下棋、生成随机数判断输赢大家好!时隔多天,我终于写博客了,真的是开心!这一次带来的是N子棋有双人对战和单人下棋,请认真看下去,我会竭…

虚拟人纷纷「出道」,社交泛娱乐场景如何迎接新顶流?

⬆️“政企数智办公行业研究报告及融云新品发布会”明天直播! 本月 12 日,花房集团即将于香港上市。关注【融云全球互联网通信云】回复【融云】抽取高颜值大容量高端可乐保温杯哦~ 中国政企数智办公平台 在带货直播平台的赫赫之名下,娱乐直播…

Git —— 那些在工作中日常使用的操作

Git —— 那些在工作中日常使用的操作 《工欲善其事,必先利其器》—— 既然点进来了,麻烦你看下去,希望你有不一样的收获~ 一、同一项目关联不同平台的远程仓库 格式:git remote add 命名 仓库链接 git remote add github ssh:/…

六、排序算法介绍2

1、冒泡排序 1.1 基本介绍 冒泡排序(Bubble Sorting) 的基本思想是: 通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值, 若发现逆序则交换, 使值较大的元素逐…

netcore接入钉钉扫码登录

netcore接入钉钉扫码登录一、首先官方文档预览二、登录钉钉开发者后台三、创建第三方登录授权应用1.新版打开方式2.旧版打开方式(1)先返回旧版页面(2)选择应用开发(3)编辑登录应用信息(4&#x…

npm包是什么?如何发布npm包?

Node的组成 内置模块 自定义模块 第三方模块(什么是包?) npm包包括那些东西? package.json README.md 。。。.js 注册npm账号 细节 发布包 package.json README.md index.js date htmlEscape 层级结构 发布指令 N…

STC15 - C51 - Memory Models

文章目录STC15 - C51 - Memory Models概述笔记内存用量的优化思路ENDSTC15 - C51 - Memory Models 概述 在STC上测试呢, 想看看变量(不同类型的定义)被编译器分配在哪个内存范围(idata, pdata, xdata)? 同时, 总结一下降低内存用量的思路(如果像上位机那样内存管够, 就不用考…

Linux系统编程第五节——进程创建、终止、等待(通俗易懂快速上手版本)

目录 进程的创建 写时拷贝 进程的终止 进程的等待 状态参数status wait函数和waitpid函数 我们本节内容,主要来讲述进程控制有关的内容。 同样,我们会用通俗易懂、不同于教科书的讲授思路,来为大家讲解。 同时,本节内容板块…

你了解你的身体吗?- 基因社会

关于作者 本书的两位作者分别是以太•亚奈和马丁 • 菜凯尔,前者是哈佛大学髙级研究学者, 任职于纽约大学,是生物化学和分子药理 学的教授;后者是杜塞尔多夫海因西里•海 涅大学的生物信息学教授。两位作者从基 因之间合作和竞争…

[附源码]计算机毕业设计的4s店车辆管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…