Tkinter 中的时间显示有问题
from tkinter import *
import time
root=Tk()
e=Canvas(root,
width=436,
height=591,
background="khaki")
e.pack()
e.create_line(0,286,436,286,
fill="royalblue",
width=24,
arrow="both",
arrowshape=(244,344,244))
def gyl():
d=time.strftime("%T")
root.after(1000,gyl)
e.create_text(200,275,
text=d,
font="方正流行体简体 44 bold",
fill="fuchsia")
gyl()
mainloop()
在Tkinter中显示动态时间时,主要问题是每次回调都创建新文本对象导致重叠。以下是修正方案:
问题分析:
1. 每次调用 gyl() 都在画布上新建文本,未清除旧文本
2. 未保存文本对象ID导致无法更新内容
3. 未正确管理定时器循环
修正代码:
from tkinter import *
import time
root = Tk()
e = Canvas(root,
width=436,
height=591,
background="khaki")
e.pack()
# 创建静态图形(只执行一次)
e.create_line(0, 286, 436, 286,
fill="royalblue",
width=24,
arrow="both",
arrowshape=(244, 344, 244))
# 预先创建文本对象并保存ID
time_text = e.create_text(200, 275,
text="",
font="方正流行体简体 44 bold",
fill="fuchsia")
def update_time():
# 更新现有文本对象内容
current_time = time.strftime("%T")
e.itemconfig(time_text, text=current_time)# 关键修改:更新而非新建
root.after(1000, update_time)# 每秒触发
update_time()# 启动定时器
mainloop()
关键修改说明:
1. 使用 create_text() 预先创建文本对象并保存返回的ID
2. 在回调函数中使用 itemconfig() 更新现有文本
3. 定时器回调函数保持每秒更新
这样修改后:
√ 时间文本会每秒刷新而不会重叠
√ 减少资源占用(不再创建新对象)
√ 保持原有的图形样式不变
如果字体显示异常,请确认系统是否安装"方正流行体简体",或替换为通用字体如 "Arial 44 bold"。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 用Label 动态显示更好 from tkinter import *
import time
root=Tk()
e=Canvas(root,
width=436,
height=591,
background="khaki")
e.pack()
e.create_line(0,286,436,286,
fill="royalblue",
width=24,
arrow="both",
arrowshape=(244,344,244))
d = time.strftime("%T")
text_id = e.create_text(200,275,
text=d,
font="方正流行体简体 44 bold",
fill="fuchsia")
def gyl():
d = time.strftime("%T")
e.itemconfig(text_id, text=d)
root.after(1000, gyl)
gyl()
mainloop() 看不懂,咋办
页:
[1]