Как заставить 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()

Ответы (0 шт):