Будильник-таймер на Python с модулем Tkinter
Написал вот такую программу:
from tkinter import *
from tkinter import messagebox
import time
from pyo import *
def countdown():
time_input = float(time_tf.get())*60*60
while time_input >= 0:
print(time_input, "\r", end='')
time_input -= 1
time.sleep(1)
s = Server().boot()
a = Sine(440, 0, 0.1).out()
a.setFreq(2000)
for _ in range(3):
s.start()
time.sleep(0.5)
s.stop()
time.sleep(0.1)
window = Tk()
window.title('Бабушка-будильник')
window.geometry('600x300')
frame = Frame(window, padx=10, pady=10)
frame.pack(expand=True)
time_lb = Label(frame, text="Через каждые (сколько?) часов напоминать о перерыве")
time_lb.grid(row=3, column=1)
time_tf = Entry(frame,)
time_tf.grid(row=3, column=2, pady=5)
main_btn = Button(frame, text='Начать отсчет', command=countdown)
main_btn.grid(row=5, column=2)
window.mainloop()
когда запускаешь - кнопка активна до проигрывания таймера, а нужно чтобы она запускала таймер и сразу отжималась
помогите пожалуйста
from tkinter import *
import time
from pyo import *
def countdown():
# Деактивируем кнопку
main_btn.config(state=DISABLED)
# Получаем значение времени в секундах
time_input = float(time_tf.get()) * 60 * 60
while time_input >= 0:
# Обновляем текст метки с оставшимся временем
label_time.config(text=f"Остается времени: {time_input // 3600}ч { (time_input % 3600) // 60 }мин { time_input % 60 }с")
window.update() # Обновляем интерфейс
time.sleep(1)
time_input -= 1
# Проигрываем звук
s = Server().boot()
a = Sine(440, 0, 0.1).out()
a.setFreq(2000)
for _ in range(3):
s.start()
time.sleep(0.5)
s.stop()
time.sleep(0.1)
# Активируем кнопку обратно
main_btn.config(state=NORMAL)
label_time.config(text="Время вышло!")
window = Tk()
window.title('Бабушка-будильник')
window.geometry('600x300')
frame = Frame(window, padx=10, pady=10)
frame.pack(expand=True)
time_lb = Label(frame, text="Через каждые (сколько?) часов напоминать о перерыве")
time_lb.grid(row=3, column=1)
time_tf = Entry(frame)
time_tf.grid(row=3, column=2, pady=5)
main_btn = Button(frame, text='Начать отсчет', command=countdown)
main_btn.grid(row=5, column=2)
# Метка для отображения оставшегося времени
label_time = Label(frame, text="")
label_time.grid(row=6, columnspan=2)
window.mainloop()