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