Таймер с графическим интерфейсом на Python

Статьи

Введение

В ходе данной статьи напишем код приложения «Таймер» с графическим интерфейсом на языке программирования Python с использованием библиотеки tkinter. Таймер будет отображать количество оставшихся секунд и воспроизводить звуковой сигнал по истечении указанного времени.

Установка и импорт необходимых библиотек

Перед написанием кода необходимо установить библиотеку pygame. Для этого можно перейти в терминал/командную строку, прописать pip install pygame, нажать Enter и ждать установки.

После инсталляции библиотеки pygame импортируем все необходимые библиотеки:

import time
from tkinter import *
import pygame
  • Модуль time будет использоваться для задержек
  • Библиотека tkinter будет использоваться для создания графического интерфейса
  • Библиотека pygame будет использоваться воспроизведения звукового сигнала.

Инициализация Pygame

Инициализируем библиотеку pygame и загрузим аудиофайл, который будет воспроизводиться по истечении времени (в переменную file передаём путь до аудиофайла):

import time
from tkinter import *
import pygame

file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

Создание графического интерфейса

Создадим главное окно программы. Установим заголовок и размеры окна, а также отключим возможность изменения его размеров:

import time
from tkinter import *
import pygame

file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

root = Tk()
root.title('Таймер')
root.geometry('150x150')
root.resizable(False, False)

Создадим виджет Label, на котором будет отображать количество оставшихся секунд:

import time
from tkinter import *
import pygame

file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

root = Tk()
root.title('Таймер')
root.geometry('150x150')
root.resizable(False, False)

count_digit = Label(root, text='0', font='Arial 15 bold')
count_digit.pack()

Добавим виджет Entry (поле ввода), в котором пользователь сможет указать время (в секундах) для таймера:

import time
from tkinter import *
import pygame

file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

root = Tk()
root.title('Таймер')
root.geometry('150x150')
root.resizable(False, False)

count_digit = Label(root, text='0', font='Arial 15 bold')
count_digit.pack()

seconds = Entry(root, font='Arial 15 bold', width=7)
seconds.pack(pady=10)

Создадим кнопку btn_start, которая будет вызывать функцию start() (её создадим чуть позже) при нажатии:

import time
from tkinter import *
import pygame

file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

root = Tk()
root.title('Таймер')
root.geometry('150x150')
root.resizable(False, False)

count_digit = Label(root, text='0', font='Arial 15 bold')
count_digit.pack()

seconds = Entry(root, font='Arial 15 bold', width=7)
seconds.pack(pady=10)

btn_start = Button(root, text='Старт', font='Arial 15 bold', command=start)
btn_start.pack()

Создадим кнопку btn_stop, которая будет вызывать функцию stop() при нажатии. Но пока скроем ее с помощью метода pack_forget(). Также запустим главный цикл программы с помощью метода mainloop():

import time
from tkinter import *
import pygame

file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

root = Tk()
root.title('Таймер')
root.geometry('150x150')
root.resizable(False, False)

count_digit = Label(root, text='0', font='Arial 15 bold')
count_digit.pack()

seconds = Entry(root, font='Arial 15 bold', width=7)
seconds.pack(pady=10)

btn_start = Button(root, text='Старт', font='Arial 15 bold', command=start)
btn_start.pack()

btn_stop = Button(root, text='Выключить', font='Arial 15 bold', command=stop)

root.mainloop()

Определение функций

Функция start()

Пришло время для создания функций, и начнём с функции start(). Она будет вызываться при нажатии кнопки «Старт». Внутри неё в переменную duration сохраним количество секунд введённое пользователем:

def start():
    duration = int(seconds.get())

Далее будет идти цикл while, который будет выполняться в течение указанного количества секунд. Внутри цикла, в переменную m сохраним количество минут, а количество секунд в переменную s:

def start():
    duration = int(seconds.get())
    while duration:
        m, s = divmod(int(duration), 60)

Затем отформатируем время в виде минут и секунд и сохраним его в переменную min_sec_forma:

def start():
    duration = int(seconds.get())
    while duration:
        m, s = divmod(int(duration), 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)

Далее заменим текст в count_digit на данные из min_sec_format, а также обновим текст в лейбле count_digit, добавим засыпание на одну секунду и вычтем секунду из переменной duration:

def start():
    duration = int(seconds.get())
    while duration:
        m, s = divmod(int(duration), 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        count_digit['text'] = min_sec_format
        count_digit.update()
        time.sleep(1)
        duration -= 1

После цикла вызовем функцию sound(), которую мы сейчас создадим:

def start():
    duration = int(seconds.get())
    while duration:
        m, s = divmod(int(duration), 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        count_digit['text'] = min_sec_format
        count_digit.update()
        time.sleep(1)
        duration -= 1
    sound()

Функция sound()

Теперь создадим функцию sound(), которая будет вызываться при истечении указанного времени. Она скроет кнопку «Старт», покажет кнопку «Выключить» и воспроизведет звуковой сигнал:

def sound():
    btn_start.pack_forget()
    btn_stop.pack()
    pygame.mixer.music.play()

Функция stop()

Осталось создать последнюю функцию, а именно stop().Она будет вызываться при нажатии кнопки «Выключить» и скроет кнопку «Выключить», приостановив воспроизведение звукового сигнала:

def stop():
    btn_start.pack()
    btn_stop.pack_forget()
    pygame.mixer.music.stop()

Добавление функций в основной код

Добавим функции в основной код:

import time
from tkinter import *
import pygame


def start():
    duration = int(seconds.get())
    while duration:
        m, s = divmod(int(duration), 60)
        min_sec_format = '{:02d}:{:02d}'.format(m, s)
        count_digit['text'] = min_sec_format
        count_digit.update()
        time.sleep(1)
        duration -= 1
    sound()


def sound():
    btn_start.pack_forget()
    btn_stop.pack()
    pygame.mixer.music.play()


def stop():
    btn_start.pack()
    btn_stop.pack_forget()
    pygame.mixer.music.stop()


file = 'audio.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)

root = Tk()
root.title('Таймер')
root.geometry('150x150')
root.resizable(False, False)

count_digit = Label(root, text='0', font='Arial 15 bold')
count_digit.pack()

seconds = Entry(root, font='Arial 15 bold', width=7)
seconds.pack(pady=10)

btn_start = Button(root, text='Старт', font='Arial 15 bold', command=start)
btn_start.pack()

btn_stop = Button(root, text='Выключить', font='Arial 15 bold', command=stop)

root.mainloop()

Видеоурок

Таймер с графическим интерфейсом на Python

Заключение

В ходе статьи мы с Вами написали код приложения «Таймер» с графическим интерфейсом на языке программирования Python с использованием библиотеки tkinter. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Admin
Admin
IT Start