Python 在tkinter中使用延时和列表
我的代码的问题是,我想在延迟期间更新我的列表,并使标签以不同的值出现两次。我想先显示b,然后再显示d。但现在似乎只显示d。 我有什么办法可以绕过它吗? 非常感谢您的帮助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
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()