基于python的音频播放器_基于Python+tkinter+pygame的音乐播放器完整源码

import os

import tkinter

import tkinter.filedialog

import random

import time

import threading

import pygame

folder = ''

def play():

# folder用来表示存放MP3音乐文件的文件夹

global folder

musics = [folder+'\\'+music

for music in os.listdir(folder) \

if music.endswith(('.mp3', '.wav', '.ogg'))]

# 初始化混音器设备

pygame.mixer.init()

while playing:

if not pygame.mixer.music.get_busy():

# 随机播放一首歌曲

nextMusic = random.choice(musics)

pygame.mixer.music.load(nextMusic.encode())

# 播放一次

pygame.mixer.music.play(1)

musicName.set('playing....'+nextMusic)

else:

time.sleep(0.3)

root = tkinter.Tk()

root.title('音乐播放器v1.0---董付国')

root.geometry('280x70+400+300')

root.resizable(False, False)

# 关闭程序时执行的代码

def closeWindow():

# 修改变量,结束线程中的循环

global playing

playing = False

time.sleep(0.3)

try:

# 停止播放,如果已停止,

# 再次停止时会抛出异常,所以放在异常处理结构中

pygame.mixer.music.stop()

pygame.mixer.quit()

except:

pass

root.destroy()

root.protocol('WM_DELETE_WINDOW', closeWindow)

pause_resume = tkinter.StringVar(root, value='NotSet')

playing = False

# 播放按钮

def buttonPlayClick():

# 选择要播放的音乐文件夹

global folder

if not folder:

folder = tkinter.filedialog.askdirectory()

if not folder:

return

global playing

playing = True

# 创建一个线程来播放音乐,当前主线程用来接收用户操作

t = threading.Thread(target=play)

t.start()

# 根据情况禁用和启用相应的按钮

buttonPlay['state'] = 'disabled'

buttonStop['state'] = 'normal'

buttonPause['state'] = 'normal'

buttonNext['state'] = 'normal'

pause_resume.set('Pause')

buttonPlay = tkinter.Button(root,

text='Play',

command=buttonPlayClick)

buttonPlay.place(x=20, y=10, width=50, height=20)

# 停止按钮

def buttonStopClick():

global playing

playing = False

pygame.mixer.music.stop()

musicName.set('暂时没有播放音乐')

buttonPlay['state'] = 'normal'

buttonStop['state'] = 'disabled'

buttonPause['state'] = 'disabled'

buttonNext['state'] = 'disabled'

global folder

folder = ''

buttonStop = tkinter.Button(root,

text='Stop',

command=buttonStopClick)

buttonStop.place(x=80, y=10, width=50, height=20)

buttonStop['state'] = 'disabled'

# 暂停与恢复,两个功能共用一个按钮

def buttonPauseClick():

if pause_resume.get() == 'Pause':

pygame.mixer.music.pause()

pause_resume.set('Resume')

elif pause_resume.get() == 'Resume':

pygame.mixer.music.unpause()

pause_resume.set('Pause')

buttonPause = tkinter.Button(root,

textvariable=pause_resume,

command=buttonPauseClick)

buttonPause.place(x=140, y=10, width=50, height=20)

buttonPause['state'] = 'disabled'

# 下一首音乐

def buttonNextClick():

global playing

playing = False

pygame.mixer.music.stop()

pygame.mixer.quit()

buttonPlayClick()

buttonNext = tkinter.Button(root,

text='Next',

command=buttonNextClick)

buttonNext.place(x=200, y=10, width=50, height=20)

buttonNext['state'] = 'disabled'

musicName = tkinter.StringVar(root,

value='暂时没有播放音乐...')

labelName = tkinter.Label(root,

textvariable=musicName)

labelName.place(x=0, y=40, width=270, height=20)

# 启动消息循环

root.mainloop()

运行效果图:

初始状态

播放状态

暂停状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值