Python语音合成的项目实战(PyQt5+pyttsx3)

目录
  • TTS简介
  • 安装需要的包
  • UI界面
  • 功能代码
    • 语音工具类
    • 窗体类
  • 完整代码

TTS简介

TTS(Text To Speech)是一种语音合成技术,可以让机器将输入文本以语音的方式播放出来,实现机器说话的效果。

TTS分成语音处理及语音合成,先由机器识别输入的文字,再根据语音库进行语音合成。现在有很多可供调用的TTS接口,比如百度智能云的语音合成接口。微软在Windows系统中也提供了TTS的接口,可以调用此接口实现离线的TTS语音合成功能。

本文将使用pyttsx3库作为示范,编写一个语音合成小工具。

pyttsx3官方文档:https://pyttsx3.readthedocs.io

本文源码已上传至GitHub:

https://github.com/XMNHCAS/SpeechSynthesisTool

安装需要的包

安装PyQt5及其GUI设计工具

# 安装PyQt5
pip install PyQt5

# 安装PyQt5设计器
pip install PyQt5Designer

本文使用的编辑器是VSCode,不是PyCharm,使用PyQt5的方式可能存在差异,具体使用时可以根据实际情况进行配置。

安装pyttsx3

pip install pyttsx3

UI界面

可参考下图设计简单的GUI界面,由于本文主要为功能实例,故不考虑界面美观问题。

界面应有一个文本输入框,用以输入将要转化为语音的文本,同时需要一个播放按钮,用以触发语音播放的方法。语速、音量和语言可以按需选择。

使用PyQt5的设计工具,可以根据以上配置的GUI界面生成以下UI(XML)代码:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>313</width>
    <height>284</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>语音合成器</string>
  </property>
  <property name="windowIcon">
   <iconset>
    <normaloff>voice.ico</normaloff>voice.ico</iconset>
  </property>
  <widget class="QWidget" name="verticalLayoutWidget">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>10</y>
     <width>291</width>
     <height>261</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <property name="spacing">
     <number>20</number>
    </property>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_2">
      <item>
       <widget class="QLabel" name="label">
        <property name="text">
         <string>播报文本</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignJustify|Qt::AlignTop</set>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QTextEdit" name="tbx_text"/>
      </item>
     </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_4">
      <item>
       <widget class="QLabel" name="label_3">
        <property name="text">
         <string>语速</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QSlider" name="slider_rate">
        <property name="maximum">
         <number>300</number>
        </property>
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLabel" name="label_rate">
        <property name="minimumSize">
         <size>
          <width>30</width>
          <height>0</height>
         </size>
        </property>
        <property name="text">
         <string>0</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignCenter</set>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_3">
      <item>
       <widget class="QLabel" name="label_2">
        <property name="text">
         <string>音量</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QSlider" name="slider_volumn">
        <property name="maximum">
         <number>100</number>
        </property>
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLabel" name="label_volumn">
        <property name="minimumSize">
         <size>
          <width>30</width>
          <height>0</height>
         </size>
        </property>
        <property name="text">
         <string>0</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignCenter</set>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="QLabel" name="label_4">
        <property name="text">
         <string>选择语言</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QRadioButton" name="rbtn_zh">
        <property name="text">
         <string>中文</string>
        </property>
        <property name="checked">
         <bool>true</bool>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QRadioButton" name="rbtn_en">
        <property name="text">
         <string>英文</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_5">
      <item>
       <widget class="QLabel" name="label_5">
        <property name="minimumSize">
         <size>
          <width>60</width>
          <height>0</height>
         </size>
        </property>
        <property name="text">
         <string/>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="btn_play">
        <property name="minimumSize">
         <size>
          <width>0</width>
          <height>30</height>
         </size>
        </property>
        <property name="text">
         <string>播放</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

最后再使用PyQt5的界面工具,可以根据以上UI的代码,生成以下的窗体类:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'd:\Program\VSCode\Python\TTS_PyQT\tts_form.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(313, 284)
        icon = QtGui.QIcon()
        icon.addPixmap(
            QtGui.QPixmap("./voice.ico"),
            QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Form.setWindowIcon(icon)
        self.verticalLayoutWidget = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 291, 261))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(20)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label.setAlignment(QtCore.Qt.AlignJustify | QtCore.Qt.AlignTop)
        self.label.setObjectName("label")
        self.horizontalLayout_2.addWidget(self.label)
        self.tbx_text = QtWidgets.QTextEdit(self.verticalLayoutWidget)
        self.tbx_text.setObjectName("tbx_text")
        self.horizontalLayout_2.addWidget(self.tbx_text)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_4.addWidget(self.label_3)
        self.slider_rate = QtWidgets.QSlider(self.verticalLayoutWidget)
        self.slider_rate.setMaximum(300)
        self.slider_rate.setOrientation(QtCore.Qt.Horizontal)
        self.slider_rate.setObjectName("slider_rate")
        self.horizontalLayout_4.addWidget(self.slider_rate)
        self.label_rate = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_rate.setMinimumSize(QtCore.QSize(30, 0))
        self.label_rate.setAlignment(QtCore.Qt.AlignCenter)
        self.label_rate.setObjectName("label_rate")
        self.horizontalLayout_4.addWidget(self.label_rate)
        self.verticalLayout.addLayout(self.horizontalLayout_4)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_3.addWidget(self.label_2)
        self.slider_volumn = QtWidgets.QSlider(self.verticalLayoutWidget)
        self.slider_volumn.setMaximum(100)
        self.slider_volumn.setOrientation(QtCore.Qt.Horizontal)
        self.slider_volumn.setObjectName("slider_volumn")
        self.horizontalLayout_3.addWidget(self.slider_volumn)
        self.label_volumn = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_volumn.setMinimumSize(QtCore.QSize(30, 0))
        self.label_volumn.setAlignment(QtCore.Qt.AlignCenter)
        self.label_volumn.setObjectName("label_volumn")
        self.horizontalLayout_3.addWidget(self.label_volumn)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_4.setObjectName("label_4")
        self.horizontalLayout.addWidget(self.label_4)
        self.rbtn_zh = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.rbtn_zh.setChecked(True)
        self.rbtn_zh.setObjectName("rbtn_zh")
        self.horizontalLayout.addWidget(self.rbtn_zh)
        self.rbtn_en = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.rbtn_en.setObjectName("rbtn_en")
        self.horizontalLayout.addWidget(self.rbtn_en)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.label_5 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_5.setMinimumSize(QtCore.QSize(60, 0))
        self.label_5.setText("")
        self.label_5.setObjectName("label_5")
        self.horizontalLayout_5.addWidget(self.label_5)
        self.btn_play = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn_play.setMinimumSize(QtCore.QSize(0, 30))
        self.btn_play.setObjectName("btn_play")
        self.horizontalLayout_5.addWidget(self.btn_play)
        self.verticalLayout.addLayout(self.horizontalLayout_5)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "语音合成器"))
        self.label.setText(_translate("Form", "播报文本"))
        self.label_3.setText(_translate("Form", "语速"))
        self.label_rate.setText(_translate("Form", "0"))
        self.label_2.setText(_translate("Form", "音量"))
        self.label_volumn.setText(_translate("Form", "0"))
        self.label_4.setText(_translate("Form", "选择语言"))
        self.rbtn_zh.setText(_translate("Form", "中文"))
        self.rbtn_en.setText(_translate("Form", "英文"))
        self.btn_play.setText(_translate("Form", "播放"))

如果直接复制此代码,可能会出现图标丢失的问题。这个需要根据实际情况修改icon的配置,并添加要使用的ico图标文件。

功能代码

语音工具类

首先我们需要初始化并获取语音合成用的语音引擎对象。

# tts对象
engine = pyttsx3.init()

我们可以通过该对象的setProperty方法,对语音合成的对象的属性进行修改:

属性名 解释
rate 以每分钟字数表示的整数语速
volume 音量,取值范围为[0.0, 1.0]
voices 语音的字符串标识符

语音工具类代码如下,代码含义可参考注释:

import pyttsx3

class VoiceEngine():
    '''
    tts 语音工具类
    '''

    def __init__(self):
        '''
        初始化
        '''
        # tts对象
        self.__engine = pyttsx3.init()
        # 语速
        self.__rate = 150
        # 音量
        self.__volume = 100
        # 语音ID,0为中文,1为英文
        self.__voice = 0

    @property
    def Rate(self):
        '''
        语速属性
        '''
        return self.__rate

    @Rate.setter
    def Rate(self, value):
        self.__rate = value

    @property
    def Volume(self):
        '''
        音量属性
        '''
        return self.__volume

    @Volume.setter
    def Volume(self, value):
        self.__volume = value

    @property
    def VoiceID(self):
        '''
        语音ID:0 -- 中文;1 -- 英文
        '''

        return self.__voice

    @VoiceID.setter
    def VoiceID(self, value):
        self.__voice = value

    def Say(self, text):
        '''
        播放语音
        '''
        self.__engine.setProperty('rate', self.__rate)
        self.__engine.setProperty('volume', self.__volume)

        # 获取可用语音列表,并设置语音
        voices = self.__engine.getProperty('voices')
        self.__engine.setProperty('voice', voices[self.__voice].id)

        # 保存语音文件
        # self.__engine.save_to_file(text, 'test.mp3')

        self.__engine.say(text)
        self.__engine.runAndWait()
        self.__engine.stop()

窗体类

我们可以创建一个继承于我们刚刚创建的PyQt5的窗体类,并为窗体的拖拽事件和点击事件注册回调函数,同时创建一个语音工具类的实例,用以实现指定事件触发时需要执行的语音操作。

import sys
import _thread as th
from PyQt5.QtWidgets import QMainWindow, QApplication
from Ui_tts_form import Ui_Form

class MainWindow(QMainWindow, Ui_Form):
    '''
    窗体类
    '''

    def __init__(self, parent=None):
        '''
        初始化窗体
        '''
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        # 获取tts工具类实例
        self.engine = VoiceEngine()
        self.__isPlaying = False

        # 设置初始文本
        self.tbx_text.setText('床前明月光,疑似地上霜。\n举头望明月,低头思故乡。')

        # 进度条数据绑定到label中显示
        self.slider_rate.valueChanged.connect(self.setRateTextValue)
        self.slider_volumn.valueChanged.connect(self.setVolumnTextValue)

        # 设置进度条初始值
        self.slider_rate.setValue(self.engine.Rate)
        self.slider_volumn.setValue(self.engine.Volume)

        # RadioButton选择事件
        self.rbtn_zh.toggled.connect(self.onSelectVoice_zh)
        self.rbtn_en.toggled.connect(self.onSelectVoice_en)

        # 播放按钮点击事件
        self.btn_play.clicked.connect(self.onPlayButtonClick)

    def setRateTextValue(self):
        '''
        修改语速label文本值
        '''
        value = self.slider_rate.value()
        self.label_rate.setText(str(value))
        self.engine.Rate = value

    def setVolumnTextValue(self):
        '''
        修改音量label文本值
        '''
        value = self.slider_volumn.value()
        self.label_volumn.setText(str(value / 100))
        self.engine.Volume = value

    def onSelectVoice_zh(self):
        '''
        修改中文的语音配置及默认播放文本
        '''
        self.tbx_text.setText('床前明月光,疑似地上霜。\n举头望明月,低头思故乡。')
        self.engine.VoiceID = 0

    def onSelectVoice_en(self):
        '''
        修改英文的语音配置及默认的播放文本
        '''
        self.tbx_text.setText('Hello World')
        self.engine.VoiceID = 1

    def playVoice(self):
        '''
        播放
        '''

        if self.__isPlaying is not True:
            self.__isPlaying = True
            text = self.tbx_text.toPlainText()
            self.engine.Say(text)
            self.__isPlaying = False

    def onPlayButtonClick(self):
        '''
        播放按钮点击事件
        开启线程新线程播放语音,避免窗体因为语音播放而假卡死
        '''
        th.start_new_thread(self.playVoice, ())

完整代码

import sys
import _thread as th
from PyQt5.QtWidgets import QMainWindow, QApplication
from Ui_tts_form import Ui_Form
import pyttsx3

class VoiceEngine():
    '''
    tts 语音工具类
    '''

    def __init__(self):
        '''
        初始化
        '''
        # tts对象
        self.__engine = pyttsx3.init()
        # 语速
        self.__rate = 150
        # 音量
        self.__volume = 100
        # 语音ID,0为中文,1为英文
        self.__voice = 0

    @property
    def Rate(self):
        '''
        语速属性
        '''
        return self.__rate

    @Rate.setter
    def Rate(self, value):
        self.__rate = value

    @property
    def Volume(self):
        '''
        音量属性
        '''
        return self.__volume

    @Volume.setter
    def Volume(self, value):
        self.__volume = value

    @property
    def VoiceID(self):
        '''
        语音ID:0 -- 中文;1 -- 英文
        '''

        return self.__voice

    @VoiceID.setter
    def VoiceID(self, value):
        self.__voice = value

    def Say(self, text):
        '''
        播放语音
        '''
        self.__engine.setProperty('rate', self.__rate)
        self.__engine.setProperty('volume', self.__volume)
        voices = self.__engine.getProperty('voices')
        self.__engine.setProperty('voice', voices[self.__voice])

        # 保存语音文件
        # self.__engine.save_to_file(text, 'test.mp3')

        self.__engine.say(text)
        self.__engine.runAndWait()
        self.__engine.stop()

class MainWindow(QMainWindow, Ui_Form):
    '''
    窗体类
    '''

    def __init__(self, parent=None):
        '''
        初始化窗体
        '''
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        # 获取tts工具类实例
        self.engine = VoiceEngine()
        self.__isPlaying = False

        # 设置初始文本
        self.tbx_text.setText('床前明月光,疑似地上霜。\n举头望明月,低头思故乡。')

        # 进度条数据绑定到label中显示
        self.slider_rate.valueChanged.connect(self.setRateTextValue)
        self.slider_volumn.valueChanged.connect(self.setVolumnTextValue)

        # 设置进度条初始值
        self.slider_rate.setValue(self.engine.Rate)
        self.slider_volumn.setValue(self.engine.Volume)

        # RadioButton选择事件
        self.rbtn_zh.toggled.connect(self.onSelectVoice_zh)
        self.rbtn_en.toggled.connect(self.onSelectVoice_en)

        # 播放按钮点击事件
        self.btn_play.clicked.connect(self.onPlayButtonClick)

    def setRateTextValue(self):
        '''
        修改语速label文本值
        '''
        value = self.slider_rate.value()
        self.label_rate.setText(str(value))
        self.engine.Rate = value

    def setVolumnTextValue(self):
        '''
        修改音量label文本值
        '''
        value = self.slider_volumn.value()
        self.label_volumn.setText(str(value / 100))
        self.engine.Volume = value

    def onSelectVoice_zh(self):
        '''
        修改中文的语音配置及默认播放文本
        '''
        self.tbx_text.setText('床前明月光,疑似地上霜。\n举头望明月,低头思故乡。')
        self.engine.VoiceID = 0

    def onSelectVoice_en(self):
        '''
        修改英文的语音配置及默认的播放文本
        '''
        self.tbx_text.setText('Hello World')
        self.engine.VoiceID = 1

    def playVoice(self):
        '''
        播放
        '''

        if self.__isPlaying is not True:
            self.__isPlaying = True
            text = self.tbx_text.toPlainText()
            self.engine.Say(text)
            self.__isPlaying = False

    def onPlayButtonClick(self):
        '''
        修改语速label文本值
        '''
        th.start_new_thread(self.playVoice, ())

if __name__ == "__main__":
    '''
    主函数
    '''
    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())

到此这篇关于Python语音合成的项目实战(PyQt5+pyttsx3)的文章就介绍到这了,更多相关Python语音合成内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3实现语音转文字(语音识别)和文字转语音(语音合成)

    话不多说,直接上代码运行截图  1.语音合成 -------> 执行: 结果: 输入要转换的内容,程序直接帮你把转换好的mp3文件输出(因为下一步–语音识别–需要.pcm格式的文件,程序自动执行格式转换,同时生成17k.pcm文件,暂时不用管,(你也可以通过修改默认参数改变文件输出的位置,名称及是否进行pcm转换 <------- 2.语音处理 ----> 方便起见, 我们直接运行语音处理程序,识别我们上一步的17k.pcm文件: What?识别居然出现了点错误,不过不用担心,博主已经调

  • 基于Python实现语音合成小工具

    目录 TTS简介 安装需要的包 UI界面 功能代码 语音工具类 窗体类 完整代码 TTS简介 TTS(Text To Speech)是一种语音合成技术,可以让机器将输入文本以语音的方式播放出来,实现机器说话的效果. TTS分成语音处理及语音合成,先由机器识别输入的文字,再根据语音库进行语音合成.现在有很多可供调用的TTS接口,比如百度智能云的语音合成接口.微软在Windows系统中也提供了TTS的接口,可以调用此接口实现离线的TTS语音合成功能. 本文将使用pyttsx3库作为示范,编写一个语音

  • Python实现语音识别和语音合成功能

    声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移. 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建立音频内容和文本的对应关系,以此作为模型训练的基础. 案例:画出语音信号的波形和频率分布,(freq.wav数据地址) # -*- encoding:utf-8 -*- import numpy as np import numpy.fft as nf import scipy.io.wavfil

  • Python实现语音合成功能详解

    目录 导语 1.直接使用 2. 获取权限 2.1 环境准备: 2.2 获取权限 3. 代码实现 3.1 获取access_token 3.2 获取转换后音频 3.3 配置接口参数 3.4 完整demo 3.5 执行 导语 今天就给大家带来个语言识别跟语言赚文字的小工具感兴趣的铁汁萌可以往下滑了 1.直接使用 在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.4demo代码,保存为online_tts.py,在命令行执行 python online_tts.py -clien

  • Python语音合成之第三方库gTTs/pyttsx3/speech横评(内附使用方法)

    目录 Python文字转语音(调研&成品函数) 什么是语音合成技术? 如何用代码实现? gTTS库 pyttsx3库 speech库 总结 Python文字转语音(调研&成品函数) 由于项目需要, 我需要将文字转换为语音, 那么第一步就要进行调研 什么是语音合成技术? 语音合成(text to speech),简称TTS.是将文字转化为语音的一种技术,是让计算机模拟人类的嘴巴,通过不同的音色说出想表达的内容, 是人机对话的一部分.TTS可以通过神经网络的设计,把文字智能地转化为自然语音流.

  • Python深度学习实战PyQt5布局管理项目示例详解

    目录 1. 从绝对定位到布局管理 1.1 什么是布局管理 1.2 Qt 中的布局管理方法 2. 水平布局(Horizontal Layout) 3. 垂直布局(Vertical Layout) 4. 栅格布局(Grid Layout) 5. 表格布局(Form Layout) 6. 嵌套布局 7. 容器布局 布局管理就是管理图形窗口中各个部件的位置和排列.图形窗口中的大量部件也需要通过布局管理,对部件进行整理分组.排列定位,才能使界面整齐有序.美观大方. 1. 从绝对定位到布局管理 1.1 什么

  • Python实战项目用PyQt5制作漫画脸GUI界面

    目录 最终效果 前言 1.PyQt5的安装. 1.PyQt5库的安装. 2.qt designer 布局的使用. 1:打开这个设计师 2:创建一个窗口 3:设计界面,用鼠标拖动左边的控件. 4:ui转化为py 5:在python上面运行转化后的py文件 6:运行py文件 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写

  • Python深度学习实战PyQt5基本控件使用解析

    目录 1. PyQt5 控件简介 1.1 什么是控件 1.2 编辑控件的属性 1.3 PyQt5 的控件类型 输入控件: 显示控件: 高级控件: 2. 按钮控件 2.1 按钮控件简介 2.2 按键按钮(QPushButton) 2.3 其它按钮 3. 输入控件 3.1 输入控件简介 3.2 文本输入控件 3.3 调节输入控件 4. Python 应用程序调用图形界面 1. PyQt5 控件简介 1.1 什么是控件 控件也称控件对象,是 Qt用户界面上最基本的组件类型,也是构成用户界面的基本结构.

  • Python深度学习实战PyQt5信号与槽的连接

    目录 1. 信号与槽(Signals and slots) 1.1 信号与槽的原理 1.2 信号发送者与槽的接收者 2. QtDesigner 建立信号与槽的连接 2.1 信号与槽的连接:不同的发送者与接收者,槽函数为控件的内置函数 QtDesigner 设置信号/槽的连接的操作步骤如下: 2.2 信号与槽的连接:不同的发送者与接收者,槽函数为自定义函数 QtDesigner 设置信号/槽的连接的操作步骤如下: 2.3 信号与槽的连接:相同的发送者与接收者,槽函数为控件的内置函数 2.4 信号与

  • Python深度学习实战PyQt5窗口切换的堆叠布局示例详解

    目录 1. 堆叠布局简介 1. 1什么是堆叠布局(Stacked Layout) 1.2 堆叠布局的实现方法 2. 创建多窗口切换的堆叠布局 3. 堆叠布局的主程序设计 3.1 QStackedWidget 类 3.2 建立信号/槽连接 3.3 页面控制程序 3.4 堆叠布局中的控件操作 软件项目中经常需要多种不同的图形界面,以适应不同的任务场景.选项卡控件(QTackedWidget)通过标签选择打开对应的对话框页面,不需要另外编程.堆叠窗口控件(QStackedWidget)在主程序中通过编

  • Python深度学习实战PyQt5安装与环境配置过程详解

    目录 1. PyQt5 图形界面开发工具 1.1 从 CLI 到 GUI 1.2 PyQt5 开发工具 2. 安装 PyQt5 和 QtTools pip 安装 PyQt5 pip 安装 QtTools 3. QtDesigner 和 PyUIC 的环境配置 3.1 在 PyCharm 添加 Create Tools 3.2 添加 QtDesigner 工具 3.3 添加 PyUIC 工具 4. QtDesigner 和 PyUIC 的快速入门 4.1 QtDesigner 的启动和入门 新建一

  • python实现H2O中的随机森林算法介绍及其项目实战

    H2O中的随机森林算法介绍及其项目实战(python实现) 包的引入:from h2o.estimators.random_forest import H2ORandomForestEstimator H2ORandomForestEstimator 的常用方法和参数介绍: (一)建模方法: model =H2ORandomForestEstimator(ntrees=n,max_depth =m) model.train(x=random_pv.names,y='Catrgory',train

  • 详解python项目实战:模拟登陆CSDN

    前言 今天为大家介绍一个利用Python模拟登陆CSDN的案例,虽然看起来很鸡肋,有时候确会有大用处,在这里就当做是一个案例练习吧,提高自己的代码水平,也了解Python如何做到模拟登陆的, 下面来看代码 导入库 获取头部信息 解析网页 返回登录过后的session 检测是否登陆正常 运行结果 以上所述是小编给大家介绍的python项目实战:模拟登陆CSDN详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • Python爬虫开发与项目实战

    内容简介 随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言和Web前端基础知识引领读者入门,之后介绍动态爬虫原理以及Scrapy爬虫框架,最后介绍大规模数据下分布式爬虫的设计以及PySpider爬虫框架等. 主要特点: l 由浅入深,从Python和Web前端基础开始讲起,逐步加深难度,层层递进. l 内容详实,从静态网站到动态网站,从单机爬虫到分布式爬虫,既包含基础知识点,又讲解了关键问题和难点

  • Python项目实战之使用Django框架实现支付宝付款功能

    一.前言 春节即将来临,大家肯定各种掏腰包花花花,小编相信大家在支付时候,微信.支付宝支付肯定是优先选择.今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用Python web框架Django来实现支付宝支付,废话不多说,一起来看看如何实现吧. 二.建立django应用 我们来建立一个Django项目然后在里面创建一个应用,如图: 三.配置并启动 然后我们设置urls文件的内容,如图: 然后再在子应用中创建一个urls.py文件,当然你也可以直接将一些视图函数写在项目中的urls.py文件

随机推荐