Python使用PySimpleGUI和Pygame編寫一個(gè)MP3播放器
前言
閑來無事,做了MP3播放器練練手,主要是研究下PySimpleGUI的界面窗口設(shè)計(jì)。先上圖,一睹為快。

一、來說說思路
文心一言提供
要使用PySimpleGUI和Pygame來創(chuàng)建一個(gè)MP3播放器,你需要完成以下步驟:
需求定義:
- 用戶應(yīng)能夠通過一個(gè)圖形用戶界面(GUI)瀏覽并選擇MP3文件。
- 播放器應(yīng)有播放/暫停按鈕,允許用戶控制音樂的播放。
- 播放器應(yīng)有一個(gè)音量控制滑塊,允許用戶調(diào)整音量。
- 播放器應(yīng)有一個(gè)進(jìn)度條,顯示當(dāng)前播放的位置和總長度。
- 用戶應(yīng)能夠通過拖動(dòng)進(jìn)度條來控制播放的位置。
- 用戶應(yīng)能夠刪除已選擇的MP3文件。
實(shí)現(xiàn)步驟:
安裝PySimpleGUI和Pygame庫:首先,你需要確保已經(jīng)安裝了這兩個(gè)庫。如果沒有,你可以使用pip命令進(jìn)行安裝:
pip install PySimpleGUI pip install pygame
創(chuàng)建GUI布局:使用PySimpleGUI創(chuàng)建一個(gè)窗口,并設(shè)置一個(gè)FileBrowse元素用于選擇MP3文件。你還需要為播放/暫停按鈕,音量滑塊,進(jìn)度條和刪除按鈕設(shè)置相應(yīng)的布局。
編寫事件處理函數(shù):你需要為FileBrowse元素,播放/暫停按鈕,音量滑塊,進(jìn)度條和刪除按鈕分別編寫事件處理函數(shù)。例如,當(dāng)用戶選擇一個(gè)文件時(shí),F(xiàn)ileBrowse元素的事件處理函數(shù)將啟動(dòng)MP3播放。播放/暫停按鈕的事件處理函數(shù)將控制音樂的播放/暫停。音量滑塊的事件處理函數(shù)將調(diào)整音量。進(jìn)度條的事件處理函數(shù)將更新播放的位置。刪除按鈕的事件處理函數(shù)將刪除已選擇的MP3文件。
集成Pygame音頻播放:使用Pygame的mixer模塊來播放MP3文件。你需要?jiǎng)?chuàng)建一個(gè)函數(shù),當(dāng)用戶選擇一個(gè)文件時(shí),這個(gè)函數(shù)將調(diào)用mixer.music.load()加載文件,然后調(diào)用mixer.music.play()開始播放。你還需要編寫暫停和恢復(fù)播放的函數(shù)。
測試并完善:最后,你需要測試你的MP3播放器,確保所有的功能都按照預(yù)期工作。你可能還需要添加一些錯(cuò)誤處理代碼,以處理例如文件不存在等可能出現(xiàn)的問題。
這只是一個(gè)基本的實(shí)現(xiàn)步驟。根據(jù)你的具體需求和偏好,你可能需要添加更多的功能和元素。
二、完整代碼
(參考文心,自行修改)
import PySimpleGUI as sg
import pygame
import os,time
sg.theme('LightGreen')
layout = [
[sg.Text('選擇MP3文件'), sg.Button('打開文件夾')],
[sg.Listbox(values=[], size=(40, 10), key='music_list', enable_events=True)],
[sg.Button('播放',key='play'), sg.Button('暫停',key='pause')],
[sg.Text('音量'), sg.Slider(range=(0, 100), default_value=50, orientation='horizontal', key='volume', enable_events=True,)],
]
window = sg.Window('MP3 播放器--IT里的交易員', layout)
# 創(chuàng)建播放列表
music_list = []
# 初始化播放器
pygame.mixer.init()
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
# 打開MP3文件所在文件夾,自動(dòng)搜索MP3文件并創(chuàng)建播放列表
elif event == '打開文件夾':
folder_path = sg.popup_get_folder('請選擇文件夾', initial_folder=os.getcwd())
for file_name in os.listdir(folder_path):
if file_name.endswith('.mp3'):
music_list.append(os.path.join(folder_path, file_name))
window['music_list'].update(music_list)
# 點(diǎn)擊文件名后,自動(dòng)開始播放,并將按鈕修改為停止;如正在播放,點(diǎn)擊計(jì)停止播放,并將按鈕修改為播放
elif event == 'play':
if pygame.mixer.music.get_busy():
pygame.mixer.music.stop()
window['play'].update('播放')
else:
music = values['music_list'][0]
if music:
pygame.mixer.music.load(music)
pygame.mixer.music.play()
window['play'].update('停止')
else:
sg.popup("請打開MP3所在文件夾")
# 點(diǎn)擊文件名后,自動(dòng)開始播放
elif event == 'music_list' and len(values['music_list']):
music = values['music_list'][0]
if music:
pygame.mixer.music.load(music)
pygame.mixer.music.play()
window['play'].update('停止')
else:
sg.popup("請打開MP3所在文件夾")
# 如果正在播放按了暫停,修改為繼續(xù);如果取消暫停則改為暫停
elif event == 'pause':
if pygame.mixer.music.get_busy():
pygame.mixer.music.pause()
window['pause'].update('繼續(xù)')
else:
pygame.mixer.music.unpause()
window['pause'].update('暫停')
# 中途可以通過修改播放音量,為0-1。需要將顯示的數(shù)據(jù)除以100得到修改值
elif event == 'volume':
pygame.mixer.music.set_volume(values['volume'] / 100)
window.close()總結(jié)
本文通過對MP3文件播放,學(xué)習(xí)了PySimpleGUI和Pygame的基本操作,調(diào)測心得如下:
1、PySimpleGUI的layout 為界面構(gòu)成,使用列表即可完成界面設(shè)計(jì),這個(gè)很簡單,對于設(shè)計(jì)簡單的GUI交互界面確實(shí)很高效。key是操作這些界面元素的關(guān)鍵,當(dāng)然也可以用界面文字,因?yàn)椴缓每刂?,最終增加了key來實(shí)現(xiàn)文字修改和操作。
2、event, values = window.read()。這里的event決定了相應(yīng)哪個(gè)元素,values 可以讀取到元素的值,也可以對其進(jìn)行修改。
3、pygame.mixer即可實(shí)現(xiàn)MP3播放。具體函數(shù)見附錄。
4、本來還想對播放列表實(shí)現(xiàn)增加刪除,但覺得意義不大就取消了。
5、播放進(jìn)度,和拖放進(jìn)度功能,已實(shí)現(xiàn)播放中的顯示,但是中途無法切換播放文件,和操作習(xí)慣不太相符,以后實(shí)現(xiàn)了再說。
附錄
pygame.mixer.music.load() —— 載入一個(gè)音樂文件用于播放
pygame.mixer.music.play() —— 開始播放音樂流
pygame.mixer.music.rewind() —— 重新開始播放音樂
pygame.mixer.music.stop() —— 結(jié)束音樂播放
pygame.mixer.music.pause() —— 暫停音樂播放
pygame.mixer.music.unpause() —— 恢復(fù)音樂播放
pygame.mixer.music.fadeout() —— 淡出的效果結(jié)束音樂播放
pygame.mixer.music.set_volume() —— 設(shè)置音量
pygame.mixer.music.get_volume() —— 獲取音量
pygame.mixer.music.get_busy() —— 檢查是否正在播放音樂
pygame.mixer.music.set_pos() —— 設(shè)置播放的位置
pygame.mixer.music.get_pos() —— 獲取播放的位置
pygame.mixer.music.queue() —— 將一個(gè)音樂文件放入隊(duì)列中,并排在當(dāng)前播放的音樂之后
pygame.mixer.music.set_endevent() —— 當(dāng)播放結(jié)束時(shí)發(fā)出一個(gè)事件
pygame.mixer.music.get_endevent() —— 獲取播放結(jié)束時(shí)發(fā)送的事件
Pygame 中播放音樂的模塊和 pygame.mixer 模塊是密切聯(lián)系的。使用音樂模塊去控制在調(diào)音器上的音樂播放。
以上就是Python使用PySimpleGUI和Pygame編寫一個(gè)MP3播放器的詳細(xì)內(nèi)容,更多關(guān)于Python MP3播放器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pycharm運(yùn)行和調(diào)試不顯示結(jié)果的解決方法
今天小編就為大家分享一篇pycharm運(yùn)行和調(diào)試不顯示結(jié)果的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Python二維數(shù)組實(shí)現(xiàn)求出3*3矩陣對角線元素的和示例
今天小編就為大家分享一篇Python二維數(shù)組實(shí)現(xiàn)求出3*3矩陣對角線元素的和示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python打印詳細(xì)報(bào)錯(cuò)日志,獲取報(bào)錯(cuò)信息位置行數(shù)方式
這篇文章主要介紹了Python打印詳細(xì)報(bào)錯(cuò)日志,獲取報(bào)錯(cuò)信息位置行數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python實(shí)現(xiàn)自定義包的實(shí)例詳解
這篇文章主要介紹了實(shí)現(xiàn)自定義包的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
Python發(fā)送HTTP請求的不同方式與參數(shù)差別詳解
這篇文章主要為大家詳細(xì)介紹了Python發(fā)送HTTP請求的不同方式與參數(shù)差別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-12-12
python爬取分析超級大樂透歷史開獎(jiǎng)數(shù)據(jù)
這篇文章主要介紹了python爬取分析超級大樂透歷史開獎(jiǎng)數(shù)據(jù),本次使用了requests和beautifulsoup庫進(jìn)行數(shù)據(jù)的爬取,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02

