python 点名程序(随机点名不重复 可定义名字列表 语音播报 免费下载 多线程打包)

2023-11-05

python点名小程序

含有 调用windows本地语音播报 python多线程打包 等小技巧

软件获取

点击下方地址直接下载压缩包(免费为大家提供)
软件获取地址

大家拿了软件别忘了给博主一个免费的赞,谢谢!!

解压压缩包
在这里插入图片描述里面的MyAPP.exe就是软件了,names.txt可以按照你需要点名的列表自行输入,我这里就放了这么几个名字
在这里插入图片描述

基本软件界面

在这里插入图片描述
点击开始,会随机滚动名字,再按下暂停,实现点名,并将名字放在左侧已点名列表,同时进行语音播报

需要接着点名时,继续点击开始就会再次点名(不会重复)

如果需要重新点名,点击重新点名按钮,这时左侧框就会清空,重新在所有名字中点名

源代码解析

工程源码下载

主代码

主要代码部分,看不懂的可以看后面的部分解析

import Main_UI
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer
import sys, os
import threading
import random
import time
import copy
import multiprocessing
import win32com.client
import pythoncom

class Main_window(QtWidgets.QMainWindow, Main_UI.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Main_window, self).__init__(parent)
        self.setupUi(self)
        self.state = 0  # 0停止状态 1运行状态
        self.pushButton_start_stop.clicked.connect(self.start_stop)
        self.pushButton_restart.clicked.connect(self.restart)
        try:
            file = open('names.txt', 'r', encoding='utf-8')
            data = file.read().splitlines()  # 去掉换行符'\n',此时每个元素还是字符串
            self.name_list = [x for x in data]  # for循环将每个元素从字符串转换成数字
        except:
            QtWidgets.QMessageBox.warning(self, '警告', '请在文件夹下放入utf-8格式的names.txt')
        self.tmp_name_list = copy.deepcopy(self.name_list)
        self.name_text = "小可爱"
        self.state = 0

    def restart(self):
        self.state = 0
        self.name_text = "小可爱"
        self.label_name_show.setText(self.name_text)
        self.tmp_name_list = copy.deepcopy(self.name_list)
        self.textBrowser_name_list.clear()

    def start_stop(self):
        if self.state == 0:
            if len(self.tmp_name_list) < 1:
                QtWidgets.QMessageBox.warning(self, '警告', '已经把人名都点完了,请点击重新点名')
                return
            self.number_list = [i for i in range(len(self.tmp_name_list))]
            random.shuffle(self.number_list)
            self.state = 1
            tmp_thread = threading.Thread(target=self.update_name)
            tmp_thread.start()
            self.pushButton_start_stop.setText("暂停")
        else:
            speech_thread = threading.Thread(target=self.speech_name)
            speech_thread.start()
            self.textBrowser_name_list.append(self.name_text)
            self.state = 0
            self.pushButton_start_stop.setText("开始")
            self.tmp_name_list.remove(self.name_text)

    # 语音播报
    def speech_name(self):
        pythoncom.CoInitialize()
        speaker = win32com.client.Dispatch("SAPI.SpVoice")
        speaker.Speak(self.name_text)
        pythoncom.CoUninitialize()

    def update_name(self):
        while 1:
            for num in self.number_list:
                if self.state == 1:
                    self.name_text = self.tmp_name_list[num]
                    self.label_name_show.setText(self.name_text)
                    time.sleep(0.02)
                else:
                    return


if __name__ == '__main__':
    multiprocessing.freeze_support()
    app = QtWidgets.QApplication(sys.argv)
    main_window = Main_window()
    main_window.show()
    sys.exit(app.exec_())

部分讲解

qt类继承

从UI集成class的模板,Main_UI是Main_UI.ui文件转化得到的

class Main_window(QtWidgets.QMainWindow, Main_UI.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Main_window, self).__init__(parent)
        self.setupUi(self)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main_window = Main_window()
    main_window.show()
    sys.exit(app.exec_())

读取txt获取名字并转化为list

file = open('names.txt', 'r', encoding='utf-8')
data = file.read().splitlines()  # 去掉换行符'\n',此时每个元素还是字符串
self.name_list = [x for x in data]  # for循环将每个元素从字符串转换成数字

生成随机序列
利用random生成随机序列,保证点名的随机性

self.number_list = [i for i in range(len(self.tmp_name_list))]
random.shuffle(self.number_list)

python多线程
我两次用到了多线程,名字的循环显示、语音播报

import threading
tmp_thread = threading.Thread(target=self.update_name)
tmp_thread.start()

调用windows本地语音播报
在多线程下跑,放置阻塞,在线程前后分别加上pythoncom.CoInitialize()和pythoncom.CoUninitialize()处理端口进程,不然在多线程情况下就会报错
利用win32com进行语音播报
我这个方式觉得是比较舒服的调用windows语音合成的,可以作为模板套用

import win32com.client
import pythoncom

speech_thread = threading.Thread(target=self.speech_name)
speech_thread.start()
# 语音播报
def speech_name(self):
    pythoncom.CoInitialize()
    speaker = win32com.client.Dispatch("SAPI.SpVoice")
    speaker.Speak(self.name_text)
    pythoncom.CoUninitialize()

python多线程打包

需要打包的python多线程程序,需要引入multiprocessing,并且像我这样加上这一句multiprocessing.freeze_support(),当然如果你加了打包还是报错,那就不是代码的问题,可能是你此时环境设置有问题,建议换一下虚拟环境试试

import multiprocessing

if __name__ == '__main__':
    multiprocessing.freeze_support()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 点名程序(随机点名不重复 可定义名字列表 语音播报 免费下载 多线程打包) 的相关文章

随机推荐

  • 详细记录YOLACT实例分割ncnn实现

    点击上方 AI算法修炼营 选择加星标或 置顶 标题以下 全是干货 整理 公众号 深度学习与计算机视觉 作者 nihui 链接 https zhuanlan zhihu com p 128974102 本文转载自知乎 作者已授权 未经许可请勿
  • 《写给大家看的设计书(第4版)》读书笔记

    文章目录 前言 设计原则 亲密性 对齐 重复 对比 结语 前言 设计类的书籍看过一些 大多分为两类 一类是讲基础的 构图 明暗 色彩等基础理论 还有一类是分享介绍具体案里的 这两类书籍对于大多数并不想真正成为设计师的人来说很多时候并没有什么
  • 位置无关码介绍

    1 基本概念 应用程序必须经过编译 汇编和链接后才变成可执行文件 在链接时 要对所有目标文件进行地址重定位 建立符号引用规则 同时为变量 函数等分配运行地址 当程序执行时 系统必须把代码加载到链接时所指定的地址空间即链接地址 链接地址介绍在
  • 使用C写Python的模块

    使用C写Python的模块 2012 12 21 23 49 更新 邹业盛 概述 引入 Python h 头文件 编写包装函数 处理从 Python 传入的参数 实现逻辑功能 处理 C 中的返回值 注册函数 注册模块 编译 原文发于2010
  • 【开发工具】【make】make 3.82源码编译安装

    摘要 通过下载make 3 82源码 再编译机上安装make 3 82版本 解决make版本过高的问题 1 下载make 3 82 下载地址为 wget ftp ftp gnu org gnu make make 3 82 tar gz 我
  • 全局监控 click事件的四种方式

    本文主要给大家分享如何在全局上去监听 click 点击事件 并做些通用处理或是拦截 使用场景可能就是具体的全局防快速重复点击 或是通用打点分析上报 用户行为监控等 以下将以四种不同的思路和实现方式去监控全局的点击操作 由简单到复杂逐一讲解
  • Linux学习笔记-----网络编程套接字

    目录 一 概念 一 端口号概念 二 套接字概念 三 套接字 socket 编程接口 四 sockaddr结构 五 网络字节序 二 基于UDP的相关理解 一 UDP协议 二 编写简单的UDP服务端和客户端 三 小结 三 基于TCP的相关理解
  • iOS 自动构建命令——xcodebuild

    想想当初天天来到公司 每天需要做一件事就是打开Xcode打包ipa 上传到fir 日复一日月复一月年复一年的做着同样的事情 作为有志成为优秀工程师的我来说 这是必须要解决的问题 所以决定自动化解决问题 简介 xcodebuild 是苹果发布
  • Qt环境变量配置

    在桌面找到 此电脑 右击 找到属性 点击属性 找到高级系统设置 点击 选中环境变量 选中path 点击编辑 进入环境变量是这个样子的 下一步找到Qt安装的位置复制路径 这个是2015 64的 2015 32和2017 64的路径都要 然后
  • 如何选择期权品种,是做期货期货还是做期权

    有朋友问 国内的疫情目前得到较好的控制 经济也在逐渐恢复运行 国外的疫情在加重 也许会有部分国家经济做阶段停摆 假如上面的成立 我们是不是可以选择一种套利 买入国内经济需求会带动上涨的商品 卖出国外经济下滑会带动下跌的商品 如果这个方案可行
  • 分布式系统下的纠删码技术(一) -- Erasure Code (EC)

    近几个月主要参与一个分布式存储系统的纠删码部分 用于数据容错 纠删码在学术界出现比较早 现在ceph 微软的存储系统 Hadoop 3 0等都用了EC 文章会分为多篇 主要将Erasure Code LRC 以及相关的数学基础 作为学习总结
  • 前端技术搭建贪吃蛇小游戏(内含源码)

    功能介绍 以下是贪吃蛇小游戏的玩法和规则 游戏开始时 玩家控制一条小蛇在游戏区域内移动 通过吃食物来增加分数 小蛇的移动方向由玩家控制 可以使用键盘上的方向键来控制小蛇的移动方向 当小蛇吃到食物时 它会变长 并且玩家的分数会增加 如果小蛇撞
  • 拷贝构造函数(默认的,自定义的,什么时候一定要自定义,什么时候系统会自动调用)

    为什么有指针成员的类 要自定义拷贝构造函数 参考了 https blog csdn net caoshangpa article details 79226270 没有拷贝构造函数的类 系统会创建默认的拷贝构造函数 默认拷贝构造函数是浅拷贝
  • 【JSON 初级】

    概述 前后台数据交换的格式标准 一种优秀的 数据格式 采用键值对的方式 取数据 用键 优势 比XML更小 更快 更容易解析 JSON是存储和交换文本信息的语法 类似XML 工具 网上有校验json数据 并提示错误 将数据转化为json数据
  • 深入理解java虚拟机【并发编程缓存】

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 随着多核CPU的高速发展 为了充分利用硬件的计算资源 操作系统的并发多任务功能正变得越来越重要 但是CPU在进行计算时 还需要从内存读取输出 并 将计算结果存放到内存中 然
  • 【华为OD机试】分苹果(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 闲聊:自动化到底是干什么的?

    很多人会问 自动化到底是干什么的 也许是因为这个专业所要学习和掌握的知识太庞杂了 以至于自动化被称之为万能胶 干什么都行 却又都不专业 很大一部分同学上到大二大三还不知道自己具体能做什么 迷茫中便选择了转行 希望还在迷茫中的低年级的同学看了
  • C++11变长模板解析(深入理解C++11)

    参考自 深入理解C 11 变长模版 变长函数和变长的模版参数 变长函数 double sum int n 求n个double数据之和 double sum 0 va list args 接受输入数据的数据结构 需声明stdarg h va
  • 3D游戏设计作业9:游戏智能

    坦克对战游戏 AI 设计 游戏截图 1 作业要求 从商店下载游戏 Kawaii Tank 或 其他坦克模型 构建 AI 对战坦克 具体要求 使用 感知 思考 行为 模型 建模 AI 坦克 场景中要放置一些障碍阻挡对手视线 坦克需要放置一个矩
  • python 点名程序(随机点名不重复 可定义名字列表 语音播报 免费下载 多线程打包)

    python点名小程序 含有 调用windows本地语音播报 python多线程打包 等小技巧 软件获取 点击下方地址直接下载压缩包 免费为大家提供 软件获取地址 大家拿了软件别忘了给博主一个免费的赞 谢谢 解压压缩包 里面的MyAPP e