更改 python 中的执行顺序

Changing order of execution in python

我最近开始编程并编写了一个相当简单的程序。但是卡在了一个点上。我的程序做了一件非常简单的事情,当你点击一个按钮时,它会说一行并在屏幕上显示该文本。但它是先说出文字然后显示在屏幕上,但我想要它的反面,即它应该先显示在屏幕上然后再说出文字。

    from tkinter import *
    import pyttsx3

    root = Tk()

    def speak():
        engine = pyttsx3.init()
        say = "I am speaking."

        text.insert("0.0", say)

        engine.say(say)
        engine.runAndWait()

    text = Text(root)
    text.pack()
    btn = Button(root, text="speak", command=speak)
    btn.pack()

    root.mainloop()

提前致谢。

您可以延迟拨打 engine.say

from tkinter import *
import pyttsx3


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


def display_and_speak():
    sentence = "I am speaking."
    text.insert("1.0", sentence)
    root.after(1000, speak, sentence)   # call to speak delayed 1 second


engine = pyttsx3.init()

root = Tk()
text = Text(root)
text.pack()
btn = Button(root, text="speak", command=display_and_speak)
btn.pack()

root.mainloop()

这是因为engine.runAndWait()阻塞了应用程序,所以在朗读完成之前tkinter mainloop无法更新文本框。

你可以调用text.update_idletasks()强制tkinter在说话前更新文本框:

    engine = pyttsx3.init() # initialize only once

    def speak():
        say = "I am speaking."
        text.insert("0.0", say)
        text.update_idletasks() # force tkinter update

        engine.say(say)
        engine.runAndWait()