Python 3.x 使用Python的GUI进行语音输入和输出

Python 3.x 使用Python的GUI进行语音输入和输出,python-3.x,speech-recognition,text-to-speech,pysimplegui,pyttsx3,Python 3.x,Speech Recognition,Text To Speech,Pysimplegui,Pyttsx3,我一直在尝试使用python制作一个基本的语音助手——它会听我的命令,并根据需要进行语音响应(打开网页,或讲笑话等)。我正在为此使用pyttsx3和speech\u recognition。就这一点而言,它工作得很好——它听我说,然后说出它的反应(并将同样的结果并排打印到终端上) 我想做的是制作一个与之配套的基本GUI,这样我就可以把它变成一个合适的应用程序。没什么特别的-只是一个彩色的背景,一个绿色的灯光当它“听”和一个无休止的滚动区域打印出它的话旁边 我试着用PySimpleGUI来做这个。

我一直在尝试使用python制作一个基本的语音助手——它会听我的命令,并根据需要进行语音响应(打开网页,或讲笑话等)。我正在为此使用
pyttsx3
speech\u recognition
。就这一点而言,它工作得很好——它听我说,然后说出它的反应(并将同样的结果并排打印到终端上)

我想做的是制作一个与之配套的基本GUI,这样我就可以把它变成一个合适的应用程序。没什么特别的-只是一个彩色的背景,一个绿色的灯光当它“听”和一个无休止的滚动区域打印出它的话旁边

我试着用PySimpleGUI来做这个。首先,我只是将
print=sg.print
,其中sg是我导入的
PySimpleGui
作为。理想情况下,这将运行一个“调试窗口”,并在那里打印内容。但是,调试窗口通常会停止响应,并且也会出现延迟

这是我正在运行的基本代码

import pyttsx3
import PySimpleGUI as sg 
import speech_recognition as sr

engine = pyttsx3.init('sapi5') 
voices = engine.getProperty('voices') 
engine.setProperty('voice', voices[0].id) 

#print=sg.Print

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

def takeCommand():
      
    r = sr.Recognizer()
      
    with sr.Microphone() as source:

        print("Listening...") 
        r.pause_threshold = 1
        audio = r.listen(source)
    
    try: 
        print("Recognizing...")     
        query = r.recognize_google(audio, language ='en-in') 
        print(f"User said: {query}\n") 
    
    except Exception as e: 
        print(e)
        print("Unable to Recognizing your voice.")
        speak("Sorry, I didn't get that.")
        return "None"

    return query 

if __name__ == '__main__': 

    while True:
        query=takeCommand().lower()

        if 'how are you' in query:
            speak("I am fine, thanks")
            print("I am fine, thanks")
            speak("You?")
            resp = takeCommand()
            for i in ["good","fine","okay"]:
                if i in resp:
                    speak(f"That's good to know, user.")
                    print(f"That's good to know, user.")
按原样运行时,它将在终端中运行。如果你在显示“正在听”后说“你好”,它会回答。但是,当您取消对打印部件的注释时,它会在gui调试窗口中运行,并且存在明显的延迟。为什么会这样?另外,我如何使用适当的单独窗口(而不是调试窗口)来执行此操作?如果不是PySimpleGUI,我应该使用什么