You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Tkinter中不使用after()函数延迟指定时间修改标签文本?

Tkinter延迟更新标签的解决方案

问题分析

  • 原代码使用time.sleep(6.9)会阻塞Tkinter的事件循环,导致窗口要等延迟结束后才会显示
  • 若将mainloop()移到time.sleep()之前,time.sleep()会在窗口关闭后才执行,因为mainloop()是Tkinter的事件循环,会阻塞后续代码
  • 你误以为after()函数不接受小数形式的秒数,但实际上after()的参数是整数毫秒数,只需将小数秒转换为整数毫秒即可解决问题。

解决方案一:将小数秒转为整数毫秒使用after()

这是最简洁的方案,适合大多数场景:

from tkinter import *

root = Tk()
lyrics = StringVar()
lyrics.set("unleash")
l = Label(root, textvariable=lyrics)
l.pack()

def change_text():
    lyrics.set("you!!")
    print('ses')

# 将6.9秒转换为毫秒:6.9 * 1000 = 6900
root.after(6900, change_text)
mainloop()

after()方法会在指定毫秒数后调用目标函数,不会阻塞事件循环,窗口能正常显示,到时间后自动更新文本。

解决方案二:高精度延迟(适合亚秒级精度需求)

如果需要更精确的小数延迟(比如6.95秒),可以结合时间检查和短间隔after()实现:

from tkinter import *
import time

root = Tk()
lyrics = StringVar()
lyrics.set("unleash")
l = Label(root, textvariable=lyrics)
l.pack()

# 计算目标时间:当前时间 + 6.9秒
target_time = time.perf_counter() + 6.9

def check_time():
    if time.perf_counter() >= target_time:
        lyrics.set("you!!")
        print('ses')
    else:
        # 每10毫秒检查一次,保证精度
        root.after(10, check_time)

# 启动检查
check_time()
mainloop()

这种方法通过定时检查当前时间是否达到目标值,实现更精准的延迟,避免毫秒转换的精度损失。

内容的提问来源于stack exchange,提问作者rishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:25:27