Форум сайта python.su
В программе необходимо реализовать несколько секундомеров. Решил начать с самого простого:
from tkinter import * import sys from threading import Timer import datetime as dt from datetime import datetime from threading import Timer #Переменная счётчика времени: temp_1 = 0 temp_2 = 0 after_id_1 = '' after_id_2 = '' #Функция глобального секундомера_1: def tick_1(): global temp_1, after_id_1 after_id_1 = root.after(1000, tick_1) f_temp_1 = datetime.fromtimestamp(temp_1).strftime("%H:%M:%S") label_1.configure(text=str(f_temp_1)) temp_1 += 1 #Функция глобального секундомера_2: def tick_2(): global temp_2, after_id_2 after_id_2 = root.after(1000, tick_2) f_temp_2 = datetime.fromtimestamp(temp_2).strftime("%H:%M:%S") label_2.configure(text=str(f_temp_2)) temp_2 += 1 #Первый пак: #Нажатие кнопки Start_1 def start_tick_1(): btn_start_1.pack_forget() #Кнопка Start_1 исчезает btn_stop_1.place(x=20, y=20) #Кнопка Stop_1 появляется tick_1() #Таймер_1 запускается #Нажатие кнопки Stop_1 def stop_tick_1(): btn_stop_1.pack_forget() #Кнопка Stop_1 исчезает btn_continue_1.place(x=20, y=20) #Кнопка Continue_1 появляется root.after_cancel(after_id_1) #Таймер_1 останавливается #Нажатие кнопки Continue_1 def continue_tick_1(): btn_continue_1.pack_forget() #Кнопка Continue_1 исчезает btn_stop_1.place(x=20, y=20) #Кнопка Stop_1 появляется tick_1() #Таймер_1 возобновляется #Второй пак: #Нажатие кнопки Start_2 def start_tick_2(): btn_start_2.pack_forget() #Кнопка Start_2 исчезает btn_stop_2.place(x=20, y=40) #Кнопка Stop_2 появляется tick_2() #Таймер_2 запускается #Нажатие кнопки Stop_1 def stop_tick_2(): btn_stop_2.pack_forget() #Кнопка Stop_2 исчезает btn_continue_2.place(x=20, y=40) #Кнопка Continue_2 появляется root.after_cancel(after_id_2) #Таймер_2 останавливается #Нажатие кнопки Continue_1 def continue_tick_2(): btn_continue_2.pack_forget() #Кнопка Continue_2 исчезает btn_stop_2.place(x=20, y=40) #Кнопка Stop_2 появляется tick_2() #Таймер_1 возобновляется #Создание главного окна: root = Tk() root.title("Welcome") root.geometry('1200x800') #Создание кнопок: #Первый пак: btn_start_1 = Button(root, text="Start_1", command=start_tick_1) btn_start_1.place(x=20, y=20) btn_stop_1 = Button(root, text="Stop_1", command=stop_tick_1) btn_continue_1 = Button(root, text="Continue_1", command=continue_tick_1) #Второй пак: btn_start_2 = Button(root, text="Start_2", command=start_tick_2) btn_start_2.place(x=20, y=40) btn_stop_2 = Button(root, text="Stop_2", command=stop_tick_2) btn_continue_2 = Button(root, text="Continue_2", command=continue_tick_2) #Вывод секундомера_1: label_1 = Label(root, text='00:00:00') label_1.place(x=70, y=20) #Вывод секундомера_2: label_2 = Label(root, text='00:00:00') label_2.place(x=70, y=40) root.mainloop()
Офлайн
BCnuHyМожет для начала стоит все упростить как-то так? Чтобы понять откуда ноги растут.
Столкнулся с 2мя проблемами:
1)Первые нажатия по кнопкам проходят хорошо, всё работает, но после нажатия на кнопку Continue_1 или Continue_2 эти кнопки не исчезают, а при повторном нажатии на них отсчет времени ускоряется.
2)По какой-то причине отсчёт времени начинается с 3х часов.
Помогите разобраться, пожалуйста
from tkinter import * import time temp_1 = 0 after_id_1 = '' def tick_1(): global temp_1, after_id_1 after_id_1 = root.after(1000, tick_1) f_temp_1 = time.strftime("%H:%M:%S", time.gmtime(temp_1)) label_1.configure(text=str(f_temp_1)) temp_1 += 1 def start_tick_1(): btn_start_1.pack_forget() #Кнопка Start_1 исчезает tick_1() #Таймер_1 запускается def stop_tick_1(): btn_stop_1.pack_forget() #Кнопка Stop_1 исчезает root.after_cancel(after_id_1) #Таймер_1 останавливается def continue_tick_1(): btn_continue_1.pack_forget() #Кнопка Continue_1 исчезает tick_1() #Таймер_1 возобновляется root = Tk() root.title("Welcome") root.geometry('1200x800') btn_start_1 = Button(root, text="Start_1", command=start_tick_1) btn_start_1.place(x=20, y=20) btn_stop_1 = Button(root, text="Stop_1", command=stop_tick_1) btn_stop_1.place(x=20, y=50) # Кнопка Stop_1 появляется btn_continue_1 = Button(root, text="Continue_1", command=continue_tick_1) btn_continue_1.place(x=20, y=80) #Кнопка Continue_1 появляется label_1 = Label(root, text='00:00:00') label_1.place(x=100, y=20) root.mainloop()
Отредактировано m1r42 (Март 12, 2023 13:08:59)
Офлайн
from tkinter import * import time temp_1 = 0 after_id_1 = '' def tick_1(): global temp_1, after_id_1 after_id_1 = root.after(1000, tick_1) f_temp_1 = time.strftime("%H:%M:%S", time.gmtime(temp_1)) label_1.configure(text=str(f_temp_1)) temp_1 += 1 def start_tick_1(): btn_start_1.place_forget() #Кнопка Start_1 исчезает btn_stop_1.place(x=20, y=50) # Кнопка Stop_1 появляется tick_1() #Таймер_1 запускается def stop_tick_1(): btn_stop_1.place_forget() #Кнопка Stop_1 исчезает btn_continue_1.place(x=20, y=80) # Кнопка Continue_1 появляется root.after_cancel(after_id_1) #Таймер_1 останавливается def continue_tick_1(): btn_continue_1.place_forget() #Кнопка Continue_1 исчезает btn_stop_1.place(x=20, y=50) # Кнопка Stop_1 появляется tick_1() #Таймер_1 возобновляется root = Tk() root.title("Welcome") root.geometry('1200x800') btn_start_1 = Button(root, text="Start_1", command=start_tick_1) btn_start_1.place(x=20, y=20) btn_stop_1 = Button(root, text="Stop_1", command=stop_tick_1) btn_continue_1 = Button(root, text="Continue_1", command=continue_tick_1) label_1 = Label(root, text='00:00:00') label_1.place(x=100, y=20) root.mainloop()
Офлайн
Огромное спасибо, все проблемы устранены
Офлайн