20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放

文章目录

    • 20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放
  • 前言
  • 一、软件准备
  • 二、主要内容
    • 1.引入库
    • 2.语音合成模块
    • 3 软件初始化
    • 4 软件主界面
    • 5 发现的坑
    • 6 软件展示
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

在软件开发变得越来越容易的今天,编程新手也可以利用成熟的代码库进行有趣的开发实践,这不,我用近期学习到的python知识,为孩子开发了一个小小的学习软件,利用家里的surface pro4的触摸屏,让孩子能够定期更新学习内容,包含绘本阅读,学习汉字、组词、成语,还能学习英文字母、单词。


提示:以下是本篇文章正文内容,下面案例可供参考

一、软件准备

基于python3.6.8开发,因为到python3.9或者3.10后,pyqt5-tools安装起来有问题,无法正常安装,为了不在开发过程中遇到绕不过的坑导致重新来一遍,只好采用比较稳定保险的python3.6.8来开发,各个模块使用起来都比较正常。

软件利用到了pyqt5、openpyxl、pyttsx3、PIL、pygame等库,重点是用到了PyQt5中的图片显示、布局管理、Qmovie、QvideoWidget等功能,另外还尝试了百度api、微软api制作语音合成,效果很好,孩子说很喜欢

具体用pip install 要安装的库即可
有什么问题可以咨询我qq:450995246

二、主要内容

1.引入库

代码如下(示例):

from PyQt5 import sip
import sysfrom PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, pyqtSignal, QTimer, QUrl
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QFileDialog
from PyQt5.QtWidgets import QWidget
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtMultimedia import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap, QIcon, QCursor, QImage, QMoviefrom doll_advanture import Ui_Form as Form_Main
from doll_start import Ui_Form as Form_Childimport randomfrom Doll_classes import Map_, Doll_, myVideoWidget
import pyttsx3
import pyttsx3.drivers
import pyttsx3.drivers.sapi5
from PIL import Image
import pygamefrom win32.lib import win32con
import win32api
import win32gui
import win32print

2.语音合成模块

使用一个Excel作为语音合成的文本库,同时在excel里填好生成对象的文件名,方便pygame、Qmovie等读取。
代码如下(示例):

def baidu_api(self, words, name):# words = '我是管理员,我的书,你看到了吗?'result = self.baidu_client.synthesis(words, 'zh', 1, {  # zh代表中文'vol': 5,})if not isinstance(result, dict):with open("./资源文件/sound/{}.wav".format(name), 'wb') as f.write(result)def pyttsx3_api(self, words, name):self.pyttsx3_tts.save_to_file("..." + words, "./资源文件/sound/{}.wav".format(name))self.pyttsx3_tts.runAndWait()def microsoft_api(self, words, name):# SSML_text = "哥,你在干什么呢?你怎么不给家里打电话呢?"asyncio.get_event_loop().run_until_complete(self.microsoft_tts.mainSeq(words, "./资源文件/sound/{}.mp3".format(name)))print('completed')

3 软件初始化

    def init_ui(self):self.setWindowTitle('壮壮的故事书')self.setWindowIcon(QIcon('./资源文件/pics/init/潜水艇.png'))# self.setWindowFlags(Qt.FramelessWindowHint)# self.pp = pyttsx3.init()  #使用pyttsx3播放音频self.musicer = pygame.mixerself.musicer.init()self.background_musicer = pygame.mixerself.background_musicer.init()self.track_back = self.background_musicer.Sound('./资源文件/basic_sound/background.wav')self.track_back.set_volume(0.3)self.track_back.play(-1)

用一个子窗口作为初始欢迎界面,设置入口和出口。开始播放背景音乐,用的是pygame模块。背景音乐和游戏语音利用pygame的musicer.Sound和musicer.music分别实现,可以完成背景音乐和游戏语音分开播放,互不干扰。

class Doll_start(QMainWindow, Form_Child):def __init__(self, parent=None):super(Doll_start, self).__init__(parent)self.setupUi(self)self.init_ui()self.connection()self.reply = 0def init_ui(self):self.setWindowTitle('壮壮的绘本大冒险即将开始,准备好了吗?')self.setWindowIcon(QIcon('./资源文件/pics/潜水艇.png'))self.background_musicer2 = pygame.mixerself.background_musicer2.init()self.track_back = self.background_musicer2.Sound('./资源文件/basic_sound/background.wav')self.track_back.set_volume(0.3)self.track_back.play(-1)def connection(self):self.bn_retreat.clicked.connect(self.quit_trail)self.bn_start.clicked.connect(self.start_trail)def start_trail(self):self.reply = 1self.track_back.stop()Doll_win = Doll_Advanture()# Doll_win.showFullScreen()Doll_win.show()self.close()def quit_trail(self):self.track_back.stop()self.close()self.reply = 0app.quit()

4 软件主界面

主界面和子窗口界面都使用PyQt5完成,由于绘本形状多样,主页面采用格栅布局,各子窗口根据主界面调整同时变化尺寸,除必要按钮外,绘本窗口可以自由调整,绘本图片撑满窗口,实现合适的显示框架,方便阅读。

from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(1316, 789)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())Form.setSizePolicy(sizePolicy)Form.setMinimumSize(QtCore.QSize(136, 76))Form.setMaximumSize(QtCore.QSize(1666666, 1666666))self.gridLayout = QtWidgets.QGridLayout(Form)self.gridLayout.setObjectName("gridLayout")self.horizontalLayout_5 = QtWidgets.QHBoxLayout()self.horizontalLayout_5.setObjectName("horizontalLayout_5")spacerItem = QtWidgets.QSpacerItem(938, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_5.addItem(spacerItem)self.bck_snd_on = QtWidgets.QPushButton(Form)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)sizePolicy.setHorizontalStretch(1)sizePolicy.setVerticalStretch(1)sizePolicy.setHeightForWidth(self.bck_snd_on.sizePolicy().hasHeightForWidth())self.bck_snd_on.setSizePolicy(sizePolicy)。。。。。。。。。。。。。。

5 发现的坑

Qmovie使用注意,

            self.phrase_player = QMediaPlayer()self.phrase_player.setVideoOutput(self.video_phrase)                 # 视频播放输出的widget,就是上面定义的self.phrase_player.setMedia(QMediaContent(QUrl.fromLocalFile("./资源文件/pics/words/{}.mp4".format(self.doll.map2[6][6]))))  # 选取视频文件self.phrase_player.play()

发现每次载入影片后,第二次播放就会出现黑屏一段时间,过约2秒后才能正常播放,中间费了很多时间采用每次重新生成一个VideoWidget插入到网格中,同时删除掉原widget的方法才解决。这种方法的副作用是每次更新影片播放的过程中,常常会出现界面元素跳一下,观感很不好。最后才发现自己多此一举了,应该在designer设计的时候就将播放窗口promot类型,每次play时重新载入一次影片就可以了。

6 软件展示

学组词
学英语
学汉字

总结

以上就是今天要讲的内容,本文仅仅简单介绍了软件的大致内容,源代码请到链接下载。

链接:

编译好的软件(windows x64平台运行)链接:
https://download.csdn.net/download/liuzerod/85399030

20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放相关推荐

  1. 福利!Python制作动态字符画(附源码)

    字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条来构成简单的人物.事物等形象,它一般由人工制作而成:复杂的字符画通常利用占用不同数量像素的字符代替图画上不 ...

  2. 手把手教你如何用Python制作一个电子相册?末附python教程

    这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...

  3. 疯狂python讲义视频 百度云-疯狂Python讲义 PDF高清版附源码

    内容简介 本书全面,深入地介绍了Python编程的相关内容,大致可分为四个部分.*系统部分介绍了Python的基本语法结构,函数编程,类和对象,模块和包,异常处理等: 第二部分主要介绍Python常用 ...

  4. 熬夜整理出了70个清华大佬都在用的Python经典练手项目【附源码】

    我们都知道,不管学习那门语言最终都要做出实际的东西来,而对于编程而言,这个实际的东西当然就是项目啦,不用我多说大家都知道学编程语言做项目的重要性. 于是,小编熬了几个通宵,终于整理出了70个清华大佬都 ...

  5. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  6. Java Swing图书管理系统桌面软件附源码

    Java Swing图书管理系统桌面软件附源码,亲测可运行. 功能界面如下: 登录界面,默认账号admin密码admin 主功能界面: 添加图书功能界面: 部分源码: 完整源码下载地址: JavaSw ...

  7. 【实战HTML5与CSS3】免费制作威客页面啦(附源码)

    [实战HTML5与CSS3]免费制作威客页面啦(附源码) 原文 http://www.cnblogs.com/yexiaochai/archive/2013/05/05/3060770.html 前言 ...

  8. Python实现飞机大战-第二部分(附源码、素材、超详细教程)

    飞机大战第二部分 1.前言 2.飞机射击 2.1.添加子弹的相关设置 2.2.创建文件bullet.py 2.3.修改game_functions.py 2.4.修改mian.py 2.5.射击效果 ...

  9. html制作好看的个人简历(附源码)

    文章目录 1.设计来源 1.1 主界面 1.2 基本资料页面 1.3 个人名言页面 1.4 教育经历页面 1.5 联系方式页面 1.6 自我评价页面 1.7 工作经历页面 1.8 兴趣爱好页面 1.9 ...

最新文章

  1. JCG学院开设了Java设计模式课程!
  2. 有关于mysql自增型需要返回id_关于mysql自增id,你需要知道的
  3. 计算机专业代码834,这六所高校更改专业课目录,其中不乏985高校,多数改为联考!...
  4. SpringMVC源码总结(八)类型转换PropertyEditor的背后
  5. 华为数通设备配置导出
  6. cimiss数据_中国气象数据网
  7. r语言如何计算t分布临界值_如何利用R语言进行meta分析—详细教程(2)
  8. python调用扫描仪设备_python 端口扫描仪
  9. 微信如何做好服务器,如何用免费服务器做微信JS开发
  10. 数据结构笔记整理(严蔚敏版) 更新中...
  11. 双光子荧光成像_为什么双光子成像如此重要?
  12. 图片资源类型转换为bitmap
  13. win10升级后删除自带的微软输入法
  14. 分享一组漂亮的html5后台登陆模板
  15. ap导入 ebs oracle_Oracle EBS Interface/API(1)--AP Invoice费用报表类型导入
  16. 华为机试练习汇总(JS实现)
  17. iptables 应用
  18. Could not find any downloads that satisfy the requirement opencv-python
  19. 我们的天空 - BEYOND
  20. 让我们一起开发【菜谱系统】吧,滚雪球学 Python 第三轮项目计划

热门文章

  1. 巴西矿坝决堤事故受害者亲属举行守夜仪式
  2. 信贷客户调查中最需关注的十个方面(附经典案例解析)
  3. Simplify and Robustify Negative Sampling for Implicit Collaborative Filtering (Nips‘20) 论文小结
  4. 阻抗跟踪电量计开发及量产流程
  5. Mongodb查找最大值总结
  6. ★教程3:Simulink学习教程入门60例目录
  7. Effective c++学习笔记条款20:宁以 pass-by-reference-to-const替换pass-by-value
  8. 图像处理——孔洞填充算法
  9. LittleVGL『Objects对象』介绍
  10. 概述MOS管的结构知识、原理详解-KIA MOS管