Как не допустить повторного запуска 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 шт):

Автор решения: cceniam

Сделай глобальную переменную 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()
        """тут размещаются какието надписи и т.д не важно"""

По идеи должно заработать

что-бы была возможность выключить таймер и включить повторно можно попробовать добавить вторую бул переменную и проверку в его код

→ Ссылка