Как не допустить повторного запуска root.after
есть код простейшего таймера
sec = Label(root, font = 'Cambria 100', text = '00:00:00',
background = 'Gray',
foreground = 'Red')
def tick():
global temp, after_id
after_id = root.after (1000, tick)
f_temp = dt.utcfromtimestamp (temp).strftime ('%H:%M:%S')
sec.configure (text=(str (f_temp)))
temp += 1
и функций и кнопок его запуска
def post1_ON():
"""тут размещаются какието надписи и т.д не важно"""
tick()
def post2_ON():
"""тут размещаются какието другие надписи и т.д не важно"""
tick()
post_1 = Button(root,
text='*******',
font='Cambria 14',
bg='Gainsboro',
foreground='Black',
command= post1_ON
)
post_1.place(x=10, y=950)
post_2 = Button(root,
text='********',
font='Cambria 14',
bg='Gainsboro',
foreground='Black',
command=post2_ON
)
post_2.place(x=160, y=950)
Итак вопрос проблема: при нажатии на кпопку повторно таймер ускоряется,
если добавить перед вызом tick() root.after_cancel(after_id), то таймер останавливается и заново не запускается появляется ошибка ValueError: id must be a valid identifier returned from after or after_idle Уровень моих знаний 0.1 и google не помог. Как сделать так чтобы при нажатии кнопок таймер продолжал работать без ускорений.
P.S. кнопки должны отображаться всегда, нажимать их можно в любом порядке.
Ответы (1 шт):
Сделай глобальную переменную boll
чтобы получилось что-то типо:
flag = True
def post1_ON():
global flag
if flag == True:
flag = False
tick()
"""тут размещаются какието надписи и т.д не важно"""
def post2_ON():
global flag
if flag == True:
flag = False
tick()
"""тут размещаются какието надписи и т.д не важно"""
По идеи должно заработать
что-бы была возможность выключить таймер и включить повторно можно попробовать добавить вторую бул переменную и проверку в его код