前言
來(lái)個(gè)新玩意就是教大家如何用python來(lái)制作一個(gè)音樂(lè)播放器
希望對(duì)大家有所幫助哈哈
你們也可以嘗試自己做做
先給你們展示展示最簡(jiǎn)單的,只需要九行代碼
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)和所需模塊
- python基礎(chǔ)知識(shí)
- requests庫(kù)
- time
- pygame
- tkinter
- 線(xiàn)程
環(huán)境
- windows
- pycharm 2021.2
- python 3.8
ok,直接說(shuō)上完整代碼 !運(yùn)行即可,記得給我??????
實(shí)現(xiàn)代碼
完整源碼點(diǎn)擊文末名片領(lǐng)取
導(dǎo)入模塊
import os
import time
import tkinter
import tkinter.filedialog
import threading
import pygame # pip
root = tkinter.Tk()
root.title('音樂(lè)播放器')
root.geometry('460x600+500+100')
root.resizable(False,False) # 不能拉伸
690643772 ### 源碼領(lǐng)取
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():
"""
播放音樂(lè)
: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'
# 選擇要播放的音樂(lè)文件夾
if pause_resume.get() == '播放':
pause_resume.set('暫停')
global folder
if not folder:
folder = tkinter.filedialog.askdirectory()
if not folder:
return
global playing
playing = True
690643772 ### 源碼領(lǐng)取
# 創(chuàng)建一個(gè)線(xiàn)程來(lái)播放音樂(lè),當(dāng)前主線(xiàn)程用來(lái)接收用戶(hù)操作
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()
690643772 ### 源碼領(lǐng)取
def buttonNextClick():
"""
下一首
:return:
"""
global playing
playing = False
pygame.mixer.music.stop()
global num
if len(res) == num:
num = 0
playing = True
# 創(chuàng)建線(xiàn)程播放音樂(lè),主線(xiàn)程用來(lái)接收用戶(hù)操作
t = threading.Thread(target=play)
t.start()
def closeWindow():
"""
關(guān)閉窗口
:return:
"""
# 修改變量,結(jié)束線(xiàn)程中的循環(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è)線(xiàn)程來(lái)播放音樂(lè),當(dāng)前主線(xiàn)程用來(lái)接收用戶(hù)操作
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í)沒(méi)有播放音樂(lè)...')
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()
效果展示
簡(jiǎn)易版的
最后
好了,分享到這里就結(jié)束了,喜歡的話(huà)記得點(diǎn)贊哦文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-509635.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-509635.html
到了這里,關(guān)于Python輕松實(shí)現(xiàn)音樂(lè)播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!