Как я могу обновить холст tkinter? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь сделать цифровые часы на 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 Ответ

1 голос
/ 18 июня 2019

Необходимо переконфигурировать элемент холста всякий раз, когда вы хотите его изменить (например: 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...