我正在尝试学习GUI,我想将一个简单的聊天机器人作为一个项目,它也可以说(使用pyttsx3库)...但是当它说话时,它首先说话然后停止,然后是在GUI窗口中标出它。总之...它稍有延迟......这是代码
import random
import tkinter as tk
import pyttsx3
engine = pyttsx3.init()
def speak(ui):
engine.say(ui)
engine.runAndWait()
engine.stop()
root = tk.Tk()
user_input = tk.Entry(root)
user_input.grid(row = 0, column = 1)
root.geometry("200x200")
greetings = ['hola', 'hello', 'hi', 'Hi', 'hey!', 'hey']
question = ['How are you?', 'How are you doing?']
responses = ['Okay', "I'm fine"]
huh = "I did not understand what you said"
def cb():
user_text = user_input.get()
if user_text in greetings:
bot_text = random.choice(greetings)
speak(bot_text)
elif user_text in question:
bot_text = random.choice(responses)
speak(bot_text)
else:
bot_text = huh
output.config(text=bot_text)
button = tk.Button(root, text="Enter", command=cb)
button.grid(row = 0)
output = tk.Label(root, text='')
output.grid()
tk.mainloop()
有什么方法可以解决这个问题吗?提前谢谢!
答案 0 :(得分:0)
这个概念对我来说是陌生的,但是我认为您正在寻找的是多线程。通过在两个单独的线程上打开GUI和bot,它们可以同时运行。
答案 1 :(得分:0)
这是一个旧的线程,但是可能对某人有用:不要在此简单任务中使用线程,您将使该过程变得无用繁重,只需将Lambda与按钮中的命令一起使用即可:
button = tk.Button(root, text="Enter", command=lambda: cb())