在 PyQt 中使用 pyttsx

2024-01-12

我正在 pyqt 中为我的聊天机器人制作 Gui,但我在这方面的代码中遇到了一些问题。

def __init__(self):
    super(Window, self).__init__()
    self.setGeometry(50, 50, 500, 300)
    self.setWindowTitle("Chatbot 0.3")


def offline_speak(chat_speech):
    engine = pyttsx.init()
    engine.say(chat_speech)
    engine.runAndWait()

很少有事情会改变,比如def offline_speak(自我)然后在上面提到init like self.offline_speak()但我不知道引擎代码。

有人能给我建议吗?


没有必要做offline_speak()类的方法,但此任务可能非常耗时,因此它可能会阻塞 Qt 生成的主循环,因此建议在第二个线程中执行它,如我在帮助下所示QRunnable and QThreadPool

import pyttsx

from PyQt4.QtGui import *
from PyQt4.QtCore import *


class SpeechRunnable(QRunnable):
    def __init__(self):
        QRunnable.__init__(self)
    def run(self):
        self.engine = pyttsx.init()
        self.engine.say(self.chat_speech)
        self.engine.runAndWait()

    def say(self, text):
        self.chat_speech = text
        QThreadPool.globalInstance().start(self)

    def stop(self):
        self.engine.stop()


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.runnable = None
        self.setWindowTitle("Chatbot 0.3")
        lay = QVBoxLayout(self)
        self.le = QLineEdit(text, self)
        self.btnStart = QPushButton("start", self)
        self.btnStop = QPushButton("stop", self)
        self.btnStart.clicked.connect(self.onClickedStart)
        lay.addWidget(self.le)
        lay.addWidget(self.btnStart)
        lay.addWidget(self.btnStop)


    def onClickedStart(self):
        self.runnable = SpeechRunnable()
        self.runnable.say(self.le.text())
        self.btnStop.clicked.connect(self.runnable.stop)

    def closeEvent(self, event):
        if self.runnable is not None:
            self.runnable.stop()
            QThread.msleep(100) #delay
        super(Window, self).closeEvent(event)
text = """

What is Lorem Ipsum?
Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
when an unknown printer took a galley of type and scrambled it to make a type specimen book. 
It has survived not only five centuries, but also the leap into electronic typesetting, 
remaining essentially unchanged. 
It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, 
and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
"""


if __name__ == "__main__":
    import sys

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

在 PyQt 中使用 pyttsx 的相关文章

随机推荐

  • 无法使用 LOAD DATA INFILE 将数据加载到 MySQL 数据库

    我在 Ubuntu 12 04 中使用 LAMP 我在 MySQL 中创建了一个新用户 myserver localhost 并将数据库上的 ALL 权限授予该用户 有一个文本文件 其权限设置为每个人都可以读取 但是当我尝试将数据从该文本文
  • 一长串 if/else/execute 代码分支的最佳设计模式/方法

    我有一个 遗留 代码想要重构 该代码基本上对服务器进行远程调用并获取回复 然后根据回复相应执行 代码框架示例 public Object processResponse String responseType Object response
  • git-svn 迁移致命:不是有效的 SHA1 update-ref refs/heads/master refs/remotes/trunk:命令返回错误:128

    尝试将大型但线性的 svn 存储库迁移到 git svn 存储库没有标准布局 主干 分支 标签 只有主干的一个目录 Ubuntu 12 4 LTS git 1 7 9 5 git svn clone https coawstmodel so
  • 将 COM+ 应用程序从 Windows 2003 移植到 Windows 2008 Server 时出现的问题

    我们正在将应用程序从 Windows Server 2003 迁移到 Windows Server 2008 R2 我在迁移方面面临一些问题 我在Windows Server 2008 R2中部署了许多COM 组件 32位 和DCOM组件
  • 在Android中限制EditText文本长度的最佳方法是什么

    限制文本长度的最佳方法是什么EditText在安卓中 有没有办法通过 xml 来做到这一点 文档 http developer android com reference android widget TextView html attr
  • 如何将 npm 脚本转换为 grunt 任务?

    我的 NodeJS 有以下脚本 scripts start grunt test node debug harmony node modules grunt cli bin grunt test 我正在运行节点 v0 11 13 所以我需要
  • 如何对两个表进行求和?

    我有两个表 我需要对它们进行求和 表 1 包含时间段 即年底的年份和季度 即4 8 12ETC 表 2 包含全年各季度的交易情况3 6 7 etc 我需要表 3 来汇总一年中的所有交易 以便获得年底的累积头寸 以下是一些示例代码 用于解释数
  • 部署到 us-central1 以外的区域时,客户端可调用 Firebase 函数失败

    客户端可调用 Firebase 函数失败并显示 错误 无法读取数据 因为格式不正确 当部署到美国中部1以外的地区时 尝试过欧洲 西部和亚洲 服务器代码 exports getName functions region europe west
  • WCF - 如何编写仅向特定客户端发布的发布者\订阅者服务?

    我正在以发布 订阅模式编写 WCF 服务 当有人发布活动时 我不想立即将其发送给所有客户 我希望能够为每个客户检查是否需要通知该客户该发布 基本上 这将通过访问数据库并检查该客户端是否已使用这些参数订阅该特定事件来完成 无法提前完成 只需要
  • Spidev 不使用 ioctl 同时写入/读取

    我希望找到一些帮助 即使这个问题可能更多地与硬件相关而不是与软件相关 我们将会看到 我正在开发基于 Freescales P1021 处理器 ppc e500v2 内核 的定制板 将连接外部 PCB 并可通过 SPI 进行配置 该外部 PC
  • CSS 宽度属性不受尊重

    我正在 Joomla 中向一个具有 virtualmart 的网站添加一些格式化的 div 标签 到目前为止我在这方面已经取得了成功 我修改了我们使用的模板 以包含一个 css 文件 article css 其中包含我的自定义内容 我所拥有
  • 正则表达式匹配字符串之前且最接近的第一次出现

    我正在尝试使用正则表达式来获取最接近名称 Daily 的 ID 号 不过 我遇到了困难 当我尝试正则表达式模式时 我得到以下结果 从第一个 ID 出现到选择 每日 的所有内容 所有 ID 都是单独选择的 我可以指定匹配编号来获取正确的 ID
  • RX - 重新抛出包含方法中的错误

    我需要翻译 RX 流中的错误 IObservable 进入包含流订阅的方法中的异常 因为这个问题https github com aspnet SignalR pull 1331 https github com aspnet Signal
  • Kubernetes 负载均衡

    我正在研究 Kubernetes 不考虑特定的云提供商 目前还不清楚最通用的服务 不是负载均衡器类型的服务 是否充当单个微服务的各个副本之间的内部负载均衡器 So 如何在副本之间实现内部负载均衡而不将微服务暴露给外部流量 您可以使用 pod
  • 在 JMeter 中绘制自定义变量的图表

    我有一个简单的 Java Request 采样器 即 AbstractJavaSamplerClient 如何从此采样器生成自定义变量并绘制它们的图表 最好使用开箱即用的图形侦听器 目前我只能轻松绘制采样时间图 将你的 var 放入 JMe
  • 可以画一条弯弯曲曲的线吗?

    如果我想画一条水平线 我会这样做 div div 如果我想画一条垂直线 我会这样做 line width 1px height 100px background color 000 div div 曲线比较棘手 但可以使用border ra
  • 如何创建持久化的AlarmManager

    编辑 根据 CommonsWare 的回答澄清了问题 我们通过 AlarmManager 安排一个警报每 60 秒触发一次 当我们的应用程序被终止时 我们的警报似乎不再执行 有没有办法让这些警报持续存在 即使应用程序被手动或被系统终止 这对
  • 我可以让 HttpWebRequest 包含 Windows 凭据而不等待 401 质询吗?

    我的应用程序与需要身份验证的内部 Web API 进行通信 当我发送请求时 我收到了预期的 401 质询 握手发生 经过身份验证的请求被重新发送 一切都正常进行 但是 我know需要授权 为什么我必须等待挑战 我可以强制请求发送凭据firs
  • 如何为给定字符串输入集合[重复]

    这个问题在这里已经有答案了 可能的重复 如何获得子集所有可能的组合 https stackoverflow com questions 13765699 how can i obtain all the possible combinati
  • 在 PyQt 中使用 pyttsx

    我正在 pyqt 中为我的聊天机器人制作 Gui 但我在这方面的代码中遇到了一些问题 def init self super Window self init self setGeometry 50 50 500 300 self setW