Как заставить Python одновременно выполнять метод .mainloop() а также проверять условия кода для голосового помощника?
Как заставить Python одновременно выполнять метод .mainloop() а также проверять условия кода для голосового помощника?
Делаю программу Голосового помощника с визуализацией ткинтер, но при запуске либо открывается окно ткинтер а бот не говорит, либо, если переставить .mainloop() в конец кода то после завершения цикла открывается окно, а мне надо одновременно
Код:
import speech_recognition as sr
import pyttsx3
import webbrowser
import os
import random
from tkinter import *
w = 800
h = 800
root = Tk()
root.geometry(str(w) + "x" + str(h))
root.title('Войс 2.0')
root.resizable(False,False)
r = sr.Recognizer()
greetings = ['хелоу','Вообщем это','привет!','здорёво!','здравствуйте','приветствую']
voice = pyttsx3.init()
voice.say(f"{random.choice(greetings)}! Меня зовут Эри, я ваш голосовой помощник! Скажите что-нибудь...")
voice.runAndWait()
while True:
with sr.Microphone(device_index=1) as sourse:
print("Скажите что-нибудь...")
audio = r.listen(sourse)
speech = r.recognize_google(audio,language="ru_RU").lower()
print("Вы сказали: " + speech)
if speech.find('хелоу') >=0:
voice.say(random.choice(greetings))
voice.runAndWait()
elif speech.find('Вообщем это') >=0:
voice.say(random.choice(greetings))
voice.runAndWait()
elif speech.find('привет') >=0:
voice.say(random.choice(greetings))
voice.runAndWait()
elif speech.find('здорёво') >=0:
voice.say(random.choice(greetings))
voice.runAndWait()
elif speech.find('здравствуйте') >=0:
voice.say(random.choice(greetings))
voice.runAndWait()
elif speech.find('приветствую') >=0:
voice.say(random.choice(greetings))
voice.runAndWait()
elif speech.find("что ты умеешь") >=0:
print('Команды Эри: youtube,твой создатель,скачать блокпост mobile')
voice.say("Мои команды: youtube, твой создатель, ")
voice.runAndWait()
elif speech.find("youtube") >=0:
webbrowser.open_new("https://www.youtube.com/")
voice.say("YouTube открыт")
voice.runAndWait()
elif speech.find("пока") >=0:
voice.say("До свидания")
voice.runAndWait()
break
else:
voice.say("Я вас не поняла, возможно вы не четко произнесли команду, повторите попытку")
voice.runAndWait()