我的代码的问题是我想在延迟期间更新我的列表,并使标签以不同的值出现两次。我想让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
在调用它们时使用了a_list[1]
的当前值,而不是创建lambda
时的值。您可以通过给它们一个默认参数来解决这个问题,因为它只在创建时计算。在当使用
lambda
s作为回调函数时,这是一个常见的问题。请参见Python Tkinter, setting up button callback functions with a loop,了解使用lambda
s在循环中设置一系列按钮小部件的类似问题。在这个代码可以满足你的需要。它使用
s
作为默认参数来保存a_list[1]
的值。在相关问题 更多 >
编程相关推荐