【问题标题】:pyttsx3 is conflicting with tkinterpyttsx3 与 tkinter 冲突
【发布时间】:2019-08-06 17:11:08
【问题描述】:

在我导入 pyttsx3 之前,我的 tkinter 应用程序将运行无控制台 (.pyw)。导入 pyttsx3 后,应用程序将仅从编辑器运行(空闲)。

这是一个 tkinter 应用程序,可以在空闲状态下完美运行。我导入 pyttsx3,初始化它,让它使用 Windows Sapi 语音说话,一切都很好,所有 tkinter 功能从头到尾都按预期运行。但在 Idle 之外,应用程序不会在 .pyw 模式下运行。它会短暂显示黑色控制台屏幕并关闭。我已经非常仔细地检查了——从应用程序中删除了所有 pyttsx3 代码——除了 import 语句,从字面上看,仅 import 语句就足以导致应用程序不再在 .pyw 模式下运行。

import tkinter as tk

(在 .pyw 模式下运行良好)

import tkinter as tk
import pyttsx3 as speak

(不会在 .pyw 模式下运行)

问题:如何简单地导入库(甚至不初始化或使用它......只是导入它)导致 tkinter 应用程序不再作为 .pyw 运行?导入库会以某种方式干扰 tkinter 主循环吗?

【问题讨论】:

  • 您可以从交互式 Python 会话中导入和使用 pyttsx3 吗?
  • 我写了一个没有 tkinter 的应用程序的早期交互版本。回去检查,实际上问题是一样的,所以它可能是 python 问题而不是 tkinter。我发现: 没有 pyttsx3: - 从空闲(在 shell 中)运行良好 - 从 .py 文件(在控制台中)运行良好 - 不会从 .pyw 文件运行 使用 pyttsx3: - 从空闲状态很好 - 不会作为 . py 或 .pyw 文件 同样,禁用应用程序所需的只是导入语句本身。
  • 您可能应该将该信息添加到您的问题中。
  • 其他 Tkinter 程序从 .pyw 文件运行是否没有问题?
  • 是的,只要不导入 pyttsx3,其他 tkinter 程序从 .pyw 包括这个应用程序都可以正常运行。

标签: python-3.x tkinter


【解决方案1】:

好问题。如果我不得不猜测,pyttsx3 库中的某些内容会调用一个与 Python 无关的进程,用于文本到语音的转换。在这种情况下,Windows 可能会打开一个命令提示符窗口,因为该进程是独立运行的。

除非 pyttsx3 库有关于如何抑制这种情况的文档(粗略浏览后,我没有看到),否则我会向包维护者推荐 opening a new issue我认为在Windows上运行时需要设置CREATE_NO_WINDOW flag

【讨论】:

  • 根据github的搜索功能,subprocesspyttsx3没有使用...
  • @RolandSmith,这很有趣。我进一步研究了它,似乎 pyttsx3 在 Windows 上通过pywin32 package 使用SAPI 5。我对那个包不熟悉,但是 pyttsx3 的包维护者似乎对它很熟悉,所以我还是建议 OP 用他们开一个新问题。我假设使用 pywin32 包仍然可以进行所需的更改。我删除了我评论的最后一句话,以反映 subprocess 模块没有发挥作用。
  • 非常感谢 - 开启了一个新问题。将报告我的发现。
猜你喜欢
  • 2023-02-26
  • 2012-04-05
  • 1970-01-01
  • 2021-09-26
  • 2013-04-29
  • 1970-01-01
  • 2019-11-25
  • 2017-12-09
  • 2013-10-21
相关资源
最近更新 更多