Как заставить tts (pyttsx3) что-то говорить после загрузки окна Tkinter

#python-3.x #tkinter #text-to-speech #pyttsx3

#python-3.x #tkinter #преобразование текста в речь #pyttsx3

Вопрос:

Итак, я создаю проект с множеством кнопок и окон, используя Tkinter, и я реализовал tts с помощью модуля pyttsx3. Рассмотрим следующий пример:

 import pyttsx3
from Tkinter import *

#configure text-to-speech
engine = pyttsx3.init()

def speak(text):
    engine.setProperty("rate", 150)
    engine.say(text)
    engine.runAndWait()

root = Tk()

def submit():
    top = Toplevel(root)
    hello_world = Label(top, text = "Hello World")
    hello_world.pack()
    speak("Hello World")

click_me = Button(root, text = "Click Me", command = submit)
click_me.pack()

root.mainloop()
 

При нажатии кнопки сначала запускается команда tts, и окно будет зависать до тех пор, пока pyttsx3 не закончит говорить, а затем загрузится только окно. А когда приходится говорить много текста, эта проблема усугубляется.

Чего я хочу, так это того, чтобы команда tts выполнялась после загрузки окна. Как мне это сделать?

Комментарии:

1. Вызовите hello_world.update() перед speak() этим.

2. Спасибо, это то, что я искал.

Ответ №1:

У меня была точно такая же проблема, я перепробовал все, включая потоки, но метод Root.after(2000, speak) Определенно сработает. Число указано в миллисекундах.