Python 在tkinter中使用延时和列表

Python 在tkinter中使用延时和列表,python,list,tkinter,Python,List,Tkinter,我的代码的问题是,我想在延迟期间更新我的列表,并使标签以不同的值出现两次。我想先显示b,然后再显示d。但现在似乎只显示d。 我有什么办法可以绕过它吗? 非常感谢您的帮助 import Tkinter as tk a_list=["a","b","c"] root=tk.Tk() variableone=tk.StringVar() label1=tk.Label(root,text="appear later") label1.pack() label=tk.Label(root, textv

我的代码的问题是,我想在延迟期间更新我的列表,并使标签以不同的值出现两次。我想先显示b,然后再显示d。但现在似乎只显示d。 我有什么办法可以绕过它吗? 非常感谢您的帮助

import Tkinter as tk

a_list=["a","b","c"]
root=tk.Tk()
variableone=tk.StringVar()
label1=tk.Label(root,text="appear later")
label1.pack()
label=tk.Label(root, textvariable=variableone)
label.after(2000, lambda:variableone.set(a_list[1]))
label.pack()

a_list[1]="d"
label.after(5000, lambda:variableone.set(a_list[1]))

root.mainloop()

问题是由于调用
lambda
s时使用了
a_列表[1]
的当前值,而不是创建
lambda
s时的值。您可以通过给它们一个默认参数来解决这个问题,因为它只在创建时计算

当使用
lambda
s作为回调函数时,这是一个常见问题。有关使用
lambda
s在循环中设置一系列按钮小部件的类似问题,请参阅

此代码符合您的要求。它使用
s
作为默认参数来保存
a_列表[1]
的值

import Tkinter as tk

a_list=["a","b","c"]
root=tk.Tk()
variableone=tk.StringVar()
label1=tk.Label(root,text="appear later")
label1.pack()
label=tk.Label(root, textvariable=variableone)
label.after(2000, lambda s=a_list[1]:variableone.set(s))
label.pack()

a_list[1]="d"
label.after(5000, lambda s=a_list[1]:variableone.set(s))

root.mainloop()

问题是由于调用
lambda
s时使用了
a_列表[1]
的当前值,而不是创建
lambda
s时的值。您可以通过给它们一个默认参数来解决这个问题,因为它只在创建时计算

当使用
lambda
s作为回调函数时,这是一个常见问题。有关使用
lambda
s在循环中设置一系列按钮小部件的类似问题,请参阅

此代码符合您的要求。它使用
s
作为默认参数来保存
a_列表[1]
的值

import Tkinter as tk

a_list=["a","b","c"]
root=tk.Tk()
variableone=tk.StringVar()
label1=tk.Label(root,text="appear later")
label1.pack()
label=tk.Label(root, textvariable=variableone)
label.after(2000, lambda s=a_list[1]:variableone.set(s))
label.pack()

a_list[1]="d"
label.after(5000, lambda s=a_list[1]:variableone.set(s))

root.mainloop()