Python 如何在tkinter中依次显示一个单词

Python 如何在tkinter中依次显示一个单词,python,tkinter,Python,Tkinter,我有一个简单的tkinter代码: from tkinter import * listofwordstodisplay = ['apple', 'banana', 'kiwi', 'pear'] def word(idx): return listofwordstodisplay[idx] root=Tk() root.geometry("400x200") root.configure(bg='white') label=Label(root) label

我有一个简单的tkinter代码:

from tkinter import *

listofwordstodisplay = ['apple', 'banana', 'kiwi', 'pear']
def word(idx):
    return listofwordstodisplay[idx]

root=Tk()
root.geometry("400x200")
root.configure(bg='white')

label=Label(root)

label.pack(anchor=CENTER, expand=TRUE)
label.configure(text=word(2))
sleep(2)
label.configure(text=word(3))
root.mainloop()

它只显示单词(3),即“pear”。如何使其显示单词(2),等待2秒钟,然后显示单词(3)?

仅使用
tkinter
,您可以利用
Tk。after
方法,例如

导入时间
导入线程
将tkinter作为tk导入
单词=[“苹果”、“香蕉”、“猕猴桃”、“梨”]
def refresh_标签(标签,文字):
label.configure(text=word)
root=tk.tk()
根几何(“400x200”)
root.configure(bg='white')
label=tk.label(根)
label.pack(anchor=tk.CENTER,expand=tk.TRUE)
对于i,枚举中的单词(单词):
#由于循环,需要绑定字
label.after(1000*i,lambda w=word:label.configure(text=w))
root.mainloop()

您还可以使用类似的方法并行运行代码,而不阻塞UI主循环:


Tkinter不是线程安全的,您需要将UI更新委托给UI线程本身,例如使用发布/订阅系统,请参见“必须使用类似线程的东西”这一说法不正确。OP想要的东西可以很容易地在没有线程或任何类型的多重处理的情况下完成。你确实可以使用
Tk。在
方法之后,我忘记了它。我正在编辑我的答案除了不需要使用多线程之外,
tkinter
不是线程安全的,因此从不同的GUI更新可能会导致问题。@martineau谢谢,更新后看起来也很有帮助谢谢。我会尽快试一试。