Python實現多功能音樂播放器
# 匯入
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
# 根據情況禁用和啟用相應的按鈕
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():
"""
點選播放
: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
# 建立一個執行緒來播放音樂,當前主執行緒用來接收使用者操作
t = threading.Thread(target=play)
t.start()
elif pause_resume.get() == ' 暫停 ':
# pygame.mixer.init()
pygame.mixer.music.pause()
pause外匯跟單gendan5.com_resume.set(' 繼續 ')
elif pause_resume.get() == ' 繼續 ':
# 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
# 建立執行緒播放音樂 , 主執行緒用來接收使用者操作
t = threading.Thread(target=play)
t.start()
def closeWindow():
"""
關閉視窗
:return:
"""
# 修改變數,結束執行緒中的迴圈
global playing
playing = False
time.sleep(0.3)
try:
# 停止播放,如果已停止,
# 再次停止時會丟擲異常,所以放在異常處理結構中
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
# 建立一個執行緒來播放音樂,當前主執行緒用來接收使用者操作
t = threading.Thread(target=play)
t.start()
# 視窗關閉
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'
# 標籤
musicName = tkinter.StringVar(root, value=' 暫時沒有播放音樂 ...')
labelName = tkinter.Label(root, textvariable=musicName)
labelName.place(x=10, y=30, width=260, height=20)
# 音量控制
# HORIZONTAL 表示為水平放置,預設為豎直 , 豎直為 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()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2867585/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何使用 pyqt 實現 Groove 音樂播放器QT播放器
- HTML5 實現的音樂播放器分享HTML播放器
- 多功能音樂播放器:MP Player for Mac v3.3.2啟用版播放器Mac
- Clementine for Mac - 現代音樂播放器Mac播放器
- vue音樂播放器Vue播放器
- 基於Android的音樂播放器的設計與實現Android播放器
- 多功能音訊播放器:foobar2000 for mac音訊播放器Mac
- Android 音樂播放器開發實錄(MediaSession)Android播放器Session
- 音樂播放器:Swinsian for Mac播放器Mac
- Listen 1音樂播放器播放器
- TurnTable for Mac音樂播放器Mac播放器
- 藉助 Turbolinks 實現不間斷的網頁音樂播放器網頁播放器
- 千千音樂 for Mac(原百度音樂播放器)Mac播放器
- Android開源線上音樂播放器——波尼音樂Android播放器
- 網頁實現一個簡單的音樂播放器(大佬別看。(⊙﹏⊙))網頁播放器
- mac音樂播放器:Decibel for MacMac播放器
- Swinsian for Mac(mac音樂播放器)Mac播放器
- TurnTable for Mac(iTunes音樂播放器)Mac播放器
- MacYouTube音樂播放器——Muse for MacMac播放器
- Mac音樂播放器——TurnTable for MacMac播放器
- H5音樂播放器H5播放器
- 高階音樂播放器:Swinsian for Mac播放器Mac
- Colibri for mac(無損音樂播放器)Mac播放器
- 優質音樂播放器:TurnTable for Mac播放器Mac
- 無損音樂播放器Audirvana for mac播放器Mac
- 音樂播放器WordPress外掛 WP-Player (支援網易雲音樂, 蝦米音樂, QQ音樂, 百度音播放器
- Android開源音樂播放器之高仿雲音樂黑膠唱片Android播放器
- YouTube音樂播放器:Tuner for YouTube music Mac播放器Mac
- jQuery案例-網頁音樂播放器01jQuery網頁播放器
- Sunflower音樂播放器知識點(一)播放器
- jQuery實現高仿QQ音樂jQuery
- win10 groove音樂播放器如何使用_win10系統groove音樂播放器使用操作方法Win10播放器
- Android開源音樂播放器之播放器基本功能Android播放器
- foobar2000 for mac經典音樂播放器Mac播放器
- Spotify for Mac海內外流行音樂播放器Mac播放器
- Linux 上最好的五款音樂播放器Linux播放器
- Android開源音樂播放器之線上音樂列表自動載入更多Android播放器
- [MAUI 專案實戰] 手勢控制音樂播放器(三): 動畫UI播放器動畫