Top.Mail.Ru
Ответы
Аватар пользователя
5 месяцев назад
от

Будильник-таймер на Python с модулем Tkinter

12345678910111213141516171819202122232425262728293031323334353637383940414243
 Написал вот такую программу:

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

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

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Профи
5мес

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