|
|
你的观察有误。这两种写法有本质区别,让我为你详细解释:
使用 lambda(正确方式):
- root.after(2000, lambda: b.config(background="red"))
复制代码
这是传递一个lambda函数给after方法,函数内容会在2000毫秒后执行。
不使用 lambda(错误方式):
- root.after(2000, b.config(background="red"))
复制代码
这是立即执行 b.config(background="red"),然后将它的返回值(None)作为参数传递给after方法,所以实际上相当于:
- # 先执行
- b.config(background="red") # 立即变红
- # 然后等价于
- root.after(2000, None) # 2000毫秒后什么也不做
复制代码
验证方法:
你可以用一个简单的测试程序验证:
- from tkinter import *
- root = Tk()
- def test1():
- print("按钮1被点击,开始计时...")
- root.after(2000, lambda: print("按钮1的2秒计时结束!"))
- def test2():
- print("按钮2被点击,开始计时...")
- root.after(2000, print("按钮2的2秒计时结束!"))
- Button(root, text="使用lambda", command=test1).pack()
- Button(root, text="不使用lambda", command=test2).pack()
- mainloop()
复制代码
运行这个程序,你会发现:
- 点击"使用lambda"按钮:先显示"按钮1被点击,开始计时...",2秒后显示"按钮1的2秒计时结束!"
- 点击"不使用lambda"按钮:立即显示"按钮2的2秒计时结束!",然后显示"按钮2被点击,开始计时..."
这就是为什么你需要lambda来延迟执行函数调用。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|