Найти - Пользователи
Полная версия: Простой секундомер tkinter
Начало » Python для новичков » Простой секундомер tkinter
1
BCnuHy
В программе необходимо реализовать несколько секундомеров. Решил начать с самого простого:
 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х часов.
Помогите разобраться, пожалуйста
m1r42
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
 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()
BCnuHy
Огромное спасибо, все проблемы устранены
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB