Python實(shí)現(xiàn)多功能音樂播放器詳解
前言
就是用Python做一個(gè)簡易的音樂播放器,廢話不多說,咱們直接開干
當(dāng)然,今天做這個(gè)肯定不是最簡單的,最簡單的音樂播放器,9行代碼足以
import time import pygame file = r'歌曲路徑' pygame.mixer.init() print('正在播放',file) track = pygame.mixer.music.load(file) pygame.mixer.music.play() time.sleep(130) pygame.mixer.music.stop()
準(zhǔn)備工作
知識(shí)點(diǎn)和所需模塊
1.python基礎(chǔ)知識(shí)
2.requests庫
3.time
4.pygame
5.tkinter
6.線程
環(huán)境
windows
pycharm 2021.2
python 3.8
完整代碼
# 導(dǎo)入 import os import time import tkinter import tkinter.filedialog import threading import pygame # pip root = tkinter.Tk() root.title('音樂播放器') root.geometry('460x600+500+100') root.resizable(False,False) # 不能拉伸 folder ='' res = [] num = 0 now_music = '' def buttonChooseClick(): """ 添加文件夾 :return: """ global folder global res if not folder: folder = tkinter.filedialog.askdirectory() musics = [folder + '\\' + music for music in os.listdir(folder) \ \ if music.endswith(('.mp3','.wav','.ogg'))] ret = [] for i in musics: ret.append(i.split('\\')[1:]) res.append(i.replace('\\','/')) var2 = tkinter.StringVar() var2.set(ret) lb = tkinter.Listbox(root,listvariable=var2) lb.place(x=50,y=100,width=260,height=300) if not folder: return global playing playing = True # 根據(jù)情況禁用和啟用相應(yīng)的按鈕 buttonPlay['state'] = 'normal' buttonStop['state'] = 'normal' # buttonPause['state'] = 'normal' pause_resume.set('播放') def play(): """ 播放音樂 :return: """ if len(res): pygame.mixer.init() global num while playing: if not pygame.mixer.music.get_busy(): netxMusic = res[num] print(netxMusic) print(num) pygame.mixer.music.load(netxMusic.encode()) # 播放 pygame.mixer.music.play(1) if len(res) -1 == num: num = 0 else: num = num + 1 netxMusic = netxMusic.split('\\')[1:] musicName.set('playing......' + ''.join(netxMusic)) else: time.sleep(0.1) def buttonPlayClick(): """ 點(diǎn)擊播放 :return: """ buttonNext['state'] = 'normal' buttonPrev['state'] = 'normal' # 選擇要播放的音樂文件夾 if pause_resume.get() == '播放': pause_resume.set('暫停') global folder if not folder: folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = True # 創(chuàng)建一個(gè)線程來播放音樂,當(dāng)前主線程用來接收用戶操作 t = threading.Thread(target=play) t.start() elif pause_resume.get() == '暫停': # pygame.mixer.init() pygame.mixer.music.pause() pause_resume.set('繼續(xù)') elif pause_resume.get() == '繼續(xù)': # pygame.mixer.init() pygame.mixer.music.unpause() pause_resume.set('暫停') def buttonStopClick(): """ 停止播放 :return: """ global playing playing = False pygame.mixer.music.stop() def buttonNextClick(): """ 下一首 :return: """ global playing playing = False pygame.mixer.music.stop() global num if len(res) == num: num = 0 playing = True # 創(chuàng)建線程播放音樂,主線程用來接收用戶操作 t = threading.Thread(target=play) t.start() def closeWindow(): """ 關(guān)閉窗口 :return: """ # 修改變量,結(jié)束線程中的循環(huán) global playing playing = False time.sleep(0.3) try: # 停止播放,如果已停止, # 再次停止時(shí)會(huì)拋出異常,所以放在異常處理結(jié)構(gòu)中 pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy() def control_voice(value=0.5): """ 聲音控制 :param value: 0.0-1.0 :return: """ pygame.mixer.music.set_volume(float(value)) def buttonPrevClick(): """ 上一首 :return: """ global playing playing = False pygame.mixer.music.stop() # # pygame.mixer.quit() global num # num += 1 # num -= 1 if num == 0: num = len(res) - 2 # num -= 1 elif num == len(res) - 1: num -= 2 else: num -= 2 # num -= 1 print(num) playing = True # 創(chuàng)建一個(gè)線程來播放音樂,當(dāng)前主線程用來接收用戶操作 t = threading.Thread(target=play) t.start() # 窗口關(guān)閉 root.protocol('WM_DELETE_WINDOW', closeWindow) # 添加按鈕 buttonChoose = tkinter.Button(root,text='添加',command=buttonChooseClick) # 布局 buttonChoose.place(x=50,y=10,width=50,height=20) # 播放按鈕 pause_resume = tkinter.StringVar(root,value='播放') buttonPlay = tkinter.Button(root,textvariable=pause_resume,command=buttonPlayClick) buttonPlay.place(x=190,y=10,width=50,height=20) buttonPlay['state'] = 'disabled' # 停止按鈕 buttonStop = tkinter.Button(root, text='停止',command=buttonStopClick) buttonStop.place(x=120, y=10, width=50, height=20) buttonStop['state'] = 'disabled' # 下一首 buttonNext = tkinter.Button(root, text='下一首',command=buttonNextClick) buttonNext.place(x=260, y=10, width=50, height=20) buttonNext['state'] = 'disabled' # 上一首 buttonPrev = tkinter.Button(root, text='上一首',command=buttonPrevClick) buttonPrev.place(x=330, y=10, width=50, height=20) buttonPrev['state'] = 'disabled' # 標(biāo)簽 musicName = tkinter.StringVar(root, value='暫時(shí)沒有播放音樂...') labelName = tkinter.Label(root, textvariable=musicName) labelName.place(x=10, y=30, width=260, height=20) # 音量控制 # HORIZONTAL表示為水平放置,默認(rèn)為豎直,豎直為vertical s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL, length=240, showvalue=0, tickinterval=2, resolution=0.1,command=control_voice) s.place(x=50, y=50, width=200) # 顯示 root.mainloop()
效果展示
簡易版的
還有個(gè)半成品的,目前代碼沒寫完
導(dǎo)入模塊
import os import time import tkinter import tkinter.filedialog import threading import pygame
界面
root = tkinter.Tk() root.title('音樂播放器') root.geometry('460x600+500+100') root.resizable(False,False) ?# 不能拉伸 # 顯示 root.mainloop()
按鈕
# 添加按鈕 buttonChoose = tkinter.Button(root,text='添加') # 布局 buttonChoose.place(x=50,y=10,width=50,height=20) # 播放按鈕 pause_resume = tkinter.StringVar(root,value='播放') buttonPlay = tkinter.Button(root,textvariable=pause_resume) buttonPlay.place(x=190,y=10,width=50,height=20) buttonPlay['state'] = 'disabled' # 停止按鈕 buttonStop = tkinter.Button(root, text='停止') buttonStop.place(x=120, y=10, width=50, height=20) buttonStop['state'] = 'disabled' # 下一首 buttonNext = tkinter.Button(root, text='下一首') buttonNext.place(x=260, y=10, width=50, height=20) buttonNext['state'] = 'disabled' # 上一首 buttonPrev = tkinter.Button(root, text='上一首') buttonPrev.place(x=330, y=10, width=50, height=20) buttonPrev['state'] = 'disabled' # 標(biāo)簽 musicName = tkinter.StringVar(root, value='暫時(shí)沒有播放音樂...') labelName = tkinter.Label(root, textvariable=musicName) labelName.place(x=10, y=30, width=260, height=20) # 音量控制 # HORIZONTAL表示為水平放置,默認(rèn)為豎直,豎直為vertical s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL, length=240, showvalue=0, tickinterval=2, resolution=0.1) s.place(x=50, y=50, width=200)
功能
創(chuàng)建一個(gè)文件目錄
folder ='' res = [] num = 0 now_music = ''
音樂讀取功能
def buttonChooseClick(): global folder global res if not folder: folder = tkinter.filedialog.askdirectory() musics = [folder + '\\' + music for music in os.listdir(folder) \ \ if music.endswith(('.mp3','.wav','.ogg'))] ret = [] for i in musics: ret.append(i.split('\\')[1:]) res.append(i.replace('\\','/')) if not folder: return global playing playing = True # 根據(jù)情況禁用和啟用相應(yīng)的按鈕 buttonPlay['state'] = 'normal' buttonStop['state'] = 'normal' # buttonPause['state'] = 'normal' pause_resume.set('播放')
顯示已加載的音樂
var2 = tkinter.StringVar() var2.set(ret) lb = tkinter.Listbox(root,listvariable=var2) lb.place(x=50,y=100,width=260,height=300)
播放音樂
def play(): if len(res): pygame.mixer.init() global num while playing: if not pygame.mixer.music.get_busy(): netxMusic = res[num] print(netxMusic) print(num) pygame.mixer.music.load(netxMusic.encode()) # 播放 pygame.mixer.music.play(1) if len(res) -1 == num: num = 0 else: num = num + 1 netxMusic = netxMusic.split('\\')[1:] musicName.set('playing......' + ''.join(netxMusic)) else: time.sleep(0.1) # 點(diǎn)擊播放 def buttonPlayClick(): buttonNext['state'] = 'normal' buttonPrev['state'] = 'normal' # 選擇要播放的音樂文件夾 if pause_resume.get() == '播放': pause_resume.set('暫停') global folder if not folder: folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = True # 創(chuàng)建一個(gè)線程來播放音樂,當(dāng)前主線程用來接收用戶操作 t = threading.Thread(target=play) t.start() elif pause_resume.get() == '暫停': # pygame.mixer.init() pygame.mixer.music.pause() pause_resume.set('繼續(xù)') elif pause_resume.get() == '繼續(xù)': # pygame.mixer.init() pygame.mixer.music.unpause() pause_resume.set('暫停')
停止播放
def buttonStopClick(): global playing playing = False pygame.mixer.music.stop()
下一首
def buttonNextClick(): global playing playing = False pygame.mixer.music.stop() global num if len(res) == num: num = 0 playing = True # 創(chuàng)建線程播放音樂,主線程用來接收用戶操作 t = threading.Thread(target=play) t.start()
上一首
def buttonPrevClick(): global playing playing = False pygame.mixer.music.stop() # # pygame.mixer.quit() global num # num += 1 # num -= 1 if num == 0: num = len(res) - 2 # num -= 1 elif num == len(res) - 1: num -= 2 else: num -= 2 # num -= 1 print(num) playing = True # 創(chuàng)建一個(gè)線程來播放音樂,當(dāng)前主線程用來接收用戶操作 t = threading.Thread(target=play) t.start()
音量控制
def control_voice(value=0.5): pygame.mixer.music.set_volume(float(value))
關(guān)閉窗口
def closeWindow(): # 修改變量,結(jié)束線程中的循環(huán) global playing playing = False time.sleep(0.3) try: # 停止播放,如果已停止, # 再次停止時(shí)會(huì)拋出異常,所以放在異常處理結(jié)構(gòu)中 pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy()
到此這篇關(guān)于Python實(shí)現(xiàn)多功能音樂播放器詳解的文章就介紹到這了,更多相關(guān)Python音樂播放器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Python是如何實(shí)現(xiàn)issubclass的
這篇文章主要介紹了詳解Python是如何實(shí)現(xiàn)issubclass的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07selenium+python自動(dòng)化測試之使用webdriver操作瀏覽器的方法
這篇文章主要介紹了selenium+python自動(dòng)化測試之使用webdriver操作瀏覽器的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01解決Numpy中sum函數(shù)求和結(jié)果維度的問題
今天小編大家分享一篇解決Numpy中sum函數(shù)求和結(jié)果維度的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12pycharm不在cmd中運(yùn)行卻在python控制臺(tái)運(yùn)行問題解決
這篇文章主要介紹了pycharm不在cmd中運(yùn)行卻在python控制臺(tái)運(yùn)行問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08使用Python完成SAP客戶端的打開和系統(tǒng)登陸功能
這篇文章主要介紹了使用Python完成SAP客戶端的打開和系統(tǒng)登陸,涉及到SAP的打開和登錄過程,本文重點(diǎn)介紹如何通過Python完成SAP應(yīng)用程序的打開并進(jìn)入特定的”用戶指定系統(tǒng)“,需要的朋友可以參考下2022-05-05python入門學(xué)習(xí)關(guān)于for else的特殊特性講解
本文將介紹 Python 中的" for-else"特性,并通過簡單的示例說明如何正確使用它,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11python輾轉(zhuǎn)相除法求最大公約數(shù)和最小公倍數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了python輾轉(zhuǎn)相除法求最大公約數(shù)和最小公倍數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07python 實(shí)現(xiàn)圖像快速替換某種顏色
這篇文章主要介紹了python 實(shí)現(xiàn)圖像快速替換某種顏色,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Python控制windows系統(tǒng)音量實(shí)現(xiàn)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01