如何同时运行pyttsx3和tkinter

时间:2019-07-17 02:56:05

标签: python python-3.x tkinter

我创建了一个聊天框,希望用户键入命令,并且计算机同时说出代码,但是这没有发生!我可以使用哪个模块或功能使其同步?

我已经用键绑定了一个函数,当它被击中时,该函数开始起作用。当计算机讲话时,tkinter窗口冻结,但我希望它们同时工作

engine = pyttsx3.init('sapi5')

voices = engine.getProperty('voices')
engine.setProperty('voice', voices[len(voices) - 1].id)

def speak(audio):
    chatbox.update()
    engine.say(audio)
    engine.runAndWait

def send_btn(event):
    msg = user_input.get('1.0', END)
    msg = str(msg).lower()
    user_input.delete('1.0', END)
    chatbox.insert(END, 'User: ' + msg)
    speak(msg)

我希望同时运行语音功能和tkinter窗口,并且tkinter窗口不会冻结!

2 个答案:

答案 0 :(得分:0)

您需要thread speak函数,因为它阻塞了tkinter主线程。

例如:

from threading import Thread

...

def send_btn(event):
    msg = user_input.get('1.0', END)
    msg = str(msg).lower()
    user_input.delete('1.0', END)
    chatbox.insert(END, 'User: ' + msg)
    t = Thread(target=speak, args=(msg,))
    t.start()

答案 1 :(得分:0)

Here表示您可以放engine.connect(topic : string, cb : callable),并尝试在与语音同时运行的文档中查找。