如何使tkinter画布刷新?

时间:2019-06-18 13:29:00

标签: python tkinter time

我正在尝试用python制作数字时钟,我想我做对了所有事情,但是Canvas并没有刷新,因此它只停留在1个位置。

import tkinter
import datetime

canvas = tkinter.Canvas(width=640, height=480)
canvas.pack()

t = datetime.datetime.now()
current_time = t.strftime("%H:%M:%S.%f")[:-5]
hour = t.hour
minute = t.minute
second = t.second
mc = t.microsecond
micro = mc/100000
print(current_time)

def tick():
    global current_time, micro, second, minute, hour
    micro += 1
    canvas.after(100, tick)
    if micro > 9:
        second += 1
        tick
    if second > 59:
        minute += 1
        tick
    if minute > 59:
        hour += 1
        tick
    if hour > 23:
        hour = 0
        tick

clock = canvas.create_text(320, 240, font="arial 72", text=current_time)
canvas.itemconfig(clock, text=current_time)

canvas.mainloop()

我可以这样做吗,还是需要给画布加上标签?

1 个答案:

答案 0 :(得分:1)

无论何时要更改画布项目,都必须重新配置它(例如:canvas.itemconfigure(clock, text=...))。另外,您必须调用一次tick才能开始循环。

对于简单的时钟,无需计算小时,分钟和秒。每次调用函数时,只需询问python当前时间就更简单了。

示例:

import tkinter
import datetime

canvas = tkinter.Canvas(width=640, height=480)
canvas.pack()

def tick():
    t = datetime.datetime.now()
    current_time = t.strftime("%H:%M:%S.%f")[:-5]
    canvas.itemconfigure(clock, text=current_time)
    canvas.after(100, tick)

clock = canvas.create_text(320, 240, font="arial 72")
tick()

canvas.mainloop()