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

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


前言

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

在软件开发变得越来越容易的今天,编程新手也可以利用成熟的代码库进行有趣的开发实践,这不,我用近期学习到的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 sys

from 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, QMovie

from doll_advanture import Ui_Form as Form_Main
from doll_start import Ui_Form as Form_Child

import random

from Doll_classes import Map_, Doll_, myVideoWidget
import pyttsx3
import pyttsx3.drivers
import pyttsx3.drivers.sapi5
from PIL import Image
import pygame

from 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.mixer
        self.musicer.init()
        self.background_musicer = pygame.mixer
        self.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 = 0

    def init_ui(self):
        self.setWindowTitle('壮壮的绘本大冒险即将开始,准备好了吗?')
        self.setWindowIcon(QIcon('./资源文件/pics/潜水艇.png'))
        self.background_musicer2 = pygame.mixer
        self.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 = 1
        self.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 = 0
        app.quit()

4 软件主界面

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

from PyQt5 import QtCore, QtGui, QtWidgets


class 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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 非常感谢您的提问。关于python pyqt5视频播放软件,我可以提供一些信息。PyQt5是一个Python的GUI编程工具包,它可以用来创建各种类型的应用程序,包括视频播放软件。您可以使用PyQt5中的QMediaPlayer类来实现视频播放功能。如果您需要更详细的信息,可以参考PyQt5的官方文档或者在网上搜索相关的教程。希望这些信息能够对您有所帮助。 ### 回答2: Python是一种高级编程语言,广泛用于开发各种类型的软件PyQt5是Python的一个GUI库,它提供了许多丰富的功能和工具,用于创建窗口应用程序。 对于开发一个视频播放软件PyQt5可以很好地辅助完成这个任务。首先,我们可以使用PyQt5的QMediaPlayer类来管理视频播放。这个类提供了一系列方法,如播放、暂停、停止等,用于控制视频播放状态。 在设计界面方面,PyQt5的QWidget类提供了基本的窗口组件,我们可以根据自己的需求创建一个视频播放器的界面。可以使用QVideoWidget类来显示视频的画面,还可以添加一些控制按钮,如播放按钮、暂停按钮、调整音量的滑动条等。 当用户选择一个视频文件时,我们可以使用QFileDialog类来提供一个对话框,选择要播放视频文件。然后,使用QMediaPlayer类的setMedia方法将选定的视频文件加载到播放器中进行播放。 除了基本的视频播放功能,我们还可以通过PyQt5提供的信号和槽机制,实现一些高级功能。例如,当视频播放完成时,我们可以使用QMediaPlayer类的mediaStatusChanged信号来捕获这个事件,并进行一些处理,如自动播放下一个视频或停止播放。 总之,借助PythonPyQt5,我们可以开发一个功能完善的视频播放软件。无论是基本的播放功能还是高级的扩展功能,PyQt5提供了丰富的工具和方法来满足需求。同时,Python的简洁性和易读性使得开发过程更加高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuzerod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值