Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2023 08:45:07

BCnuHy
Зарегистрирован: 2022-11-30
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой секундомер tkinter

В программе необходимо реализовать несколько секундомеров. Решил начать с самого простого:

 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()
Столкнулся с 2мя проблемами:
1)Первые нажатия по кнопкам проходят хорошо, всё работает, но после нажатия на кнопку Continue_1 или Continue_2 эти кнопки не исчезают, а при повторном нажатии на них отсчет времени ускоряется.
2)По какой-то причине отсчёт времени начинается с 3х часов.
Помогите разобраться, пожалуйста

Офлайн

#2 Март 12, 2023 12:59:33

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Простой секундомер tkinter

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()
Да, и, заметьте, что pack_forget() не работает. Может быть в вашем случае лучше использовать place_forget()?

Отредактировано m1r42 (Март 12, 2023 13:08:59)

Офлайн

#3 Март 12, 2023 13:12:17

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Простой секундомер tkinter

 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()

Офлайн

#4 Март 14, 2023 04:08:57

BCnuHy
Зарегистрирован: 2022-11-30
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой секундомер tkinter

Огромное спасибо, все проблемы устранены

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version