Гид по технологиям

Музыкальный плеер на Python — Tkinter и PyGame

6 min read Python Обновлено 12 Apr 2026
Музыкальный плеер на Python — Tkinter и PyGame
Музыкальный плеер на Python — Tkinter и PyGame

Мужчина играет на гитаре

Музыкальные плееры развивались быстро: от граммофонов и джукбоксов до CD и MP3-плееров. Сегодня проигрывать музыку можно прямо с мобильного или компьютера. На базе этой идеи мы разберём, как создать простой музыкальный плеер на Python — удобный для учебных и небольших практических задач.

Что потребуется

Коротко о модулях, которые мы используем:

  • Tkinter — стандартная библиотека GUI для Python, даёт виджеты (кнопки, метки, списки) для быстрого создания десктопных приложений.
  • PyGame — библиотека для работы с графикой и звуком; в нашем случае используется модуль mixer.music для воспроизведения аудио.
  • OS — стандартный модуль Python для работы с файловой системой и текущей директорией.

Важно: на некоторых системах Tkinter уже входит в комплект Python и не требует установки через pip.

Команды установки (если нужно):

pip install tkinter
pip install pygame

Примечание: модуль os встроен в стандартную библиотеку и дополнительной установки не требует.

Краткая архитектура приложения

Основные элементы приложения:

  • Главное окно Tkinter (root).
  • Область отображения текущего трека и статуса (LabelFrame).
  • Панель управления с кнопками PLAY, PAUSE, UNPAUSE, STOP.
  • Плейлист — Listbox с вертикальным Scrollbar.
  • Логика воспроизведения — pygame.mixer.music: load, play, pause, unpause, stop.

Минимальная структура кода — класс MusicPlayer, инкапсулирующий GUI и управление треками.

Пошаговая реализация (код и объяснение)

Начнём с импорта и определения класса. Ниже — примерный начальный блок кода, как в типичной учебной реализации:

from tkinter import *  
import pygame  
import os  
  
class MusicPlayer:  
  
  def __init__(self,root):  
    self.root = root  
    self.root.title("Music Player")  
    self.root.geometry("1000x200")  
    pygame.init()  
    pygame.mixer.init()  
    self.track = StringVar()  
    self.status = StringVar()

Пояснения:

  • pygame.init() и pygame.mixer.init() инициализируют подсистемы PyGame и звуковой микшер.
  • StringVar используется для динамического обновления текста меток в Tkinter.

Далее добавим рамку отображения трека и статуса:

    trackframe = LabelFrame(self.root,text="Song Track",font=("arial",15,"bold"),bg="#8F00FF",fg="white",bd=5,relief=GROOVE)  
    trackframe.place(x=0,y=0,width=600,height=100)  
    songtrack = Label(trackframe,textvariable=self.track,width=20,font=("arial",24,"bold"),bg="#8F00FF",fg="#B0FC38").grid(row=0,column=0,padx=10,pady=5)  
    trackstatus = Label(trackframe,textvariable=self.status,font=("arial",24,"bold"),bg="#8F00FF",fg="#B0FC38").grid(row=0,column=1,padx=10,pady=5)

Затем панель управления с четырьмя кнопками:

    buttonframe = LabelFrame(self.root,text="Control Panel",font=("arial",15,"bold"),bg="#8F00FF",fg="white",bd=5,relief=GROOVE)  
    buttonframe.place(x=0,y=100,width=600,height=100)  
    playbtn = Button(buttonframe,text="PLAY",command=self.playsong,width=6,height=1,font=("arial",16,"bold"),fg="navyblue",bg="#B0FC38").grid(row=0,column=0,padx=10,pady=5)  
    playbtn = Button(buttonframe,text="PAUSE",command=self.pausesong,width=8,height=1,font=("arial",16,"bold"),fg="navyblue",bg="#B0FC38").grid(row=0,column=1,padx=10,pady=5)  
    playbtn = Button(buttonframe,text="UNPAUSE",command=self.unpausesong,width=10,height=1,font=("arial",16,"bold"),fg="navyblue",bg="#B0FC38").grid(row=0,column=2,padx=10,pady=5)  
    playbtn = Button(buttonframe,text="STOP",command=self.stopsong,width=6,height=1,font=("arial",16,"bold"),fg="navyblue",bg="#B0FC38").grid(row=0,column=3,padx=10,pady=5)

Плейлист и скроллбар:

    songsframe = LabelFrame(self.root,text="Song Playlist",font=("arial",15,"bold"),bg="#8F00FF",fg="white",bd=5,relief=GROOVE)  
    songsframe.place(x=600,y=0,width=400,height=200)  
    scroll_y = Scrollbar(songsframe,orient=VERTICAL)  
    self.playlist = Listbox(songsframe,yscrollcommand=scroll_y.set,selectbackground="#B0FC38",selectmode=SINGLE,font=("arial",12,"bold"),bg="#CF9FFF",fg="navyblue",bd=5,relief=GROOVE)

Подготовка скроллбара, заполнение плейлиста файлами из директории:

    scroll_y.pack(side=RIGHT,fill=Y)  
    scroll_y.config(command=self.playlist.yview)  
    self.playlist.pack(fill=BOTH)  
    os.chdir("Path_to_your_songs_folder")  
    songtracks = os.listdir()  
    for track in songtracks:  
      self.playlist.insert(END,track)

Важно: в строке os.chdir(“Path_to_your_songs_folder”) укажите путь к папке с аудиофайлами на вашем компьютере.

Функции управления воспроизведением:

  def playsong(self):  
    self.track.set(self.playlist.get(ACTIVE))  
    self.status.set("-Playing")  
    pygame.mixer.music.load(self.playlist.get(ACTIVE))  
    pygame.mixer.music.play()
  def stopsong(self):  
    self.status.set("-Stopped")  
    pygame.mixer.music.stop()  
  
  def pausesong(self):  
    self.status.set("-Paused")  
    pygame.mixer.music.pause()  
  
  def unpausesong(self):  
    self.status.set("-Playing")  
    pygame.mixer.music.unpause()

Инициализация и запуск главного цикла:

root = Tk()  
MusicPlayer(root)  
root.mainloop()

Важные замечания

  • В большинстве случаев PyGame поддерживает распространённые форматы (MP3, WAV, OGG). Если файл не воспроизводится — проверьте формат и кодеки.
  • Указывайте в os.chdir корректный путь: относительный путь полезен для портируемости проекта, абсолютный — для простоты запуска.

Важно: если ваше приложение предназначено для распространения, не храните абсолютные пути в коде.

Вывод приложения и поведение

При запуске приложение открывает окно с плейлистом. Выберите трек в списке и нажмите PLAY — трек загрузится и начнёт воспроизводиться. Кнопки PAUSE, UNPAUSE и STOP работают как ожидалось: при паузе воспроизведение приостанавливается, при unpause — возобновляется.

Оконное приложение музыкального плеера на Python

Когда такая реализация подходит и когда нет

Подходит если:

  • Нужно быстро собрать рабочий плеер с минимумом зависимостей.
  • Приложение используется локально (не требует стриминга через сеть).

Не подходит если:

  • Нужен продвинутый аудио-стек (эквалайзер, DSP, микширование нескольких дорожек).
  • Планируется мобильная или веб-версия — лучше выбирать Kivy, PyQt, или web-технологии.

Альтернативы: Pyglet и Kivy — если нужна 3D-поддержка, кроссплатформенность для мобильных устройств и более современный рендеринг.

Мини-методология разработки (шаги)

  1. Настройка окружения: установить Python, PyGame; проверить доступность Tkinter.
  2. Создать базовый GUI: главное окно, фреймы, списки и кнопки.
  3. Подключить PyGame.mixer и протестировать воспроизведение простого файла.
  4. Реализовать загрузку файлов из директории и отображение в Listbox.
  5. Привязать кнопки управления к функциям play/pause/stop/unpause.
  6. Покрыть тестами сценарии воспроизведения и крайние случаи.

Критерии приёмки

  • Приложение запускается без ошибок в консоли.
  • Плейлист корректно заполняется файлами из указанной директории.
  • Кнопки PLAY, PAUSE, UNPAUSE, STOP выполняют ожидаемые действия.
  • UI не зависает при воспроизведении (главный цикл Tkinter остаётся отзывчивым).

Тест-кейсы / критерии приёмки

  • TC1: Запуск приложения — окно открывается, без исключений.
  • TC2: Заполненный плейлист — количество элементов > 0 при наличии файлов.
  • TC3: Воспроизведение MP3-файла — слышен звук, статус показывает “-Playing”.
  • TC4: Пауза и продолжение — звук приостанавливается и возобновляется.
  • TC5: Остановка — воспроизведение прекращается и позиция сбрасывается.
  • TC6: Некорректный файл — приложение не падает, появляется информативное сообщение или тихо игнорирует файл.

Роли и чеклисты

Для разработчика:

  • Убедиться, что pygame и tkinter установлены и инициализируются без ошибок.
  • Обрабатывать исключения при загрузке файлов.
  • Сделать путь к папке с музыкой настраиваемым (через аргумент командной строки или диалог).

Для тестировщика:

  • Прогнать тест-кейсы воспроизведения на нескольких форматах (MP3, WAV, OGG).
  • Проверить UI на разных разрешениях окна.

Для пользователя:

  • Убедиться, что файлы находятся в указанной папке.
  • Выбрать трек и воспользоваться кнопками управления.

Типовые проблемы и способы устранения

  • Нет звука: проверьте уровень громкости ОС и наличие поддерживаемого формата. Попробуйте WAV/OGG.
  • Ошибка инициализации mixer: убедитесь, что звуковая подсистема не занята другими приложениями и что pygame.mixer.init() отработал успешно.
  • UI “замерзает”: убедитесь, что вы не выполняете тяжёлые операции в основном потоке Tkinter; для тяжёлых задач используйте отдельные потоки или процессы.

Совместимость и миграция

  • Для кроссплатформенных UIs: рассмотрите Kivy или PyQt (если нужен нативный вид и расширенные виджеты).
  • Для мобильных приложений: Kivy предоставляет путь к упаковке под Android/iOS.
  • Для веб-версии: перенести логику воспроизведения на сервер/клиент (Web Audio API) и использовать веб-фронтенд.

Безопасность и приватность

  • Приложение локальное и не передаёт данные извне по умолчанию.
  • При добавлении функций импорта/обмена плейлистами проверяйте вводимые пути и избегайте выполнения неподтверждённых команд ОС.

Небольшой глоссарий

  • Tkinter — стандартный GUI-фреймворк для Python.
  • PyGame — библиотека для разработки мультимедиа-приложений и игр, содержит модуль mixer для звука.
  • mixer.music — подсистема PyGame для проигрывания фоновой музыки.
  • Listbox — виджет Tkinter для отображения списка элементов.
  • StringVar — тип Tkinter для связывания значения переменной с виджетом.

Короткое руководство по расширению (идеи)

  • Добавить диалог выбора директории вместо жёстко заданного пути.
  • Сохранение/загрузка плейлистов в формате M3U или JSON.
  • Отображение длительности трека и позиции воспроизведения (требует дополнительного чтения метаданных).
  • Введение очереди воспроизведения и shuffle-проигрывания.

Краткое резюме

  • Простой музыкальный плеер на Python собирается из Tkinter (интерфейс) и PyGame.mixer (звук).
  • Основные функции: загрузка файлов из папки, play/pause/unpause/stop, отображение текущего трека и статуса.
  • Для дальнейшего развития можно добавить диалоги выбора папки, поддержку плейлистов и более гибкую обработку форматов.

Важно: перед развёртыванием проверьте поведение на целевых ОС и убедитесь в корректной обработке ошибок.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Поиск и плагины в qBittorrent
Торренты

Поиск и плагины в qBittorrent

Исправить unable to resolve host в Linux
Linux

Исправить unable to resolve host в Linux

Время прочтения в WhatsApp: как узнать
Мессенджеры

Время прочтения в WhatsApp: как узнать

Восстановление системы в Windows — XP, Vista, 7
Windows

Восстановление системы в Windows — XP, Vista, 7

AVERAGEIF в Excel: среднее по условию
Excel

AVERAGEIF в Excel: среднее по условию

Hugo: быстрый старт и руководство
Static Sites

Hugo: быстрый старт и руководство