我很难创建线程并通过Python中的另一个定义运行



我一直在尝试构建一个应用程序,该应用程序将输入作为文本并给出输出为语音。

我推荐了此站点,以了解Python中的文本到语音模块:https://pythonprogramminglanguage.com/text-to-speech/

当我运行程序时,它可以完美地完成工作,但我无法使用暂停或简历等其他功能。因此,我尝试为语音功能创建一个新线程,以便每当我想要的时候更改IT语音。

这是程序:

import threading
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
t=threading.Event()
def s():
    global t
    t.set()
    data="""This is a story of two tribal Armenian boys who belonged to the 
         Garoghlanian tribe. """
    s=speak.Speak(data)
t1=threading.Thread(target=s)
t1.start

但是,我正在尝试使用TKINTER在GUI中实现该程序。我希望当用户单击按钮时读取文本。由于TKINTER的按钮将命令作为函数,因此我为新线程的初始化和启动做了一个函数,但是它正在产生一个错误,我无法解释并找到解决方案。

这是程序错误的程序:

import threading
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
t=threading.Event()
def s():
    global t
    t.set()
    data="""This is a story of two tribal Armenian boys who belonged to the 
         Garoghlanian tribe. """
    s=speak.Speak(data)
def strt():
    t1=threading.Thread(target=s)
    t1.start()

这是错误:

Exception in thread Thread-1:
Traceback (most recent call last):
File "C:ApplicationPythonlibthreading.py", line 916, in _bootstrap_inner
self.run()
File "C:ApplicationPythonlibthreading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:UsersabsanDesktopPythonProject-SpeakItSI-1.py", line 32, in 
speakITheart
s=speak.Speak(data)
File "C:UsersabsanAppDataLocalTempgen_py3.6C866CA3A-32F7-11D2-9602- 
00C04F8EE628x0x5x4.py", line 2980, in Speak
, 0)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, 
None, 0, -2147221008), None)

编辑:伙计们,我以某种方式在写这篇文章时找到了一种解决方法。我刚刚将这些行添加到程序

import pyttsx3
engine = pyttsx3.init()

我真的不知道它如何解决错误,但它起作用了!因此,这篇文章可能对面临同样问题的人有帮助。

欢呼!

我喜欢评论中的解决方案。只需在非序列线程中包含此行即可在IT中使用com(就在讲话之前)

pythoncom.CoInitialize()
self.engine.Speak(self.msg)

相关内容

  • 没有找到相关文章

最新更新