前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Python+tkinter+pygame的音乐播放器完整源码

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

作者头像
Python小屋屋主
发布2018-04-16 17:22:37
2.2K0
发布2018-04-16 17:22:37
举报
文章被收录于专栏:Python小屋

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()

运行效果图:

初始状态

播放状态

暂停状态

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档