dragov 发表于 4 天前

Tkinter 倒计时如何显示出来?



from tkinter import *
import time
root=Tk()
for i in range(10,0,-1):
   Label(root,text=f"{i} ...").pack()
   time.sleep(1)
mainloop()

每秒显示一个,不能最后一起显示出来!

FishC 发表于 4 天前

您好!您提供的代码中使用 `time.sleep(1)` 会导致 Tkinter 的主循环被阻塞,因此所有标签会在循环结束后一起显示出来,而不是每秒更新。要解决这个问题,可以使用 Tkinter 的 `after()` 方法来实现非阻塞的定时更新。以下是修正后的代码:


from tkinter import *

root = Tk()
label = Label(root, text="")# 创建一个空标签
label.pack()

def update_countdown(count):
    label.config(text=f"{count} ...")# 更新标签文本
    if count > 1:
      root.after(1000, update_countdown, count - 1)# 1000毫秒后递归调用自身

update_countdown(10)# 从10开始倒计时
mainloop()


### 代码说明:
- 使用一个标签 label 来显示倒计时,而不是创建多个标签。
- 定义函数 update_countdown(count) 来更新标签文本。
- 使用 root.after(1000, update_countdown, count - 1) 实现每秒更新一次,不会阻塞GUI。
- 倒计时从10开始,每秒递减,显示到1后停止。

这样,倒计时就会每秒更新一次,而不是最后一起显示。如果您需要倒计时结束后执行其他操作(如隐藏标签或显示消息),可以在函数中添加条件处理。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 4 天前

这个我有经验,tkinter和sleep冲突,要用after

某一个“天” 发表于 4 天前

除了ai 的方法,还可以用多线程threading
你可以参考一下这个文章
tkinter电子钟,第二版--修了bug 加上了花里胡哨的颜色
https://fishc.com.cn/thread-242901-1-1.html
(出处: 鱼C论坛)

页: [1]
查看完整版本: Tkinter 倒计时如何显示出来?