基于Python实现音乐播放器的实现示例代码
作者:Livingbody 发布时间:2023-11-26 23:58:50
标签:Python,音乐播放器
一、环境设置
第一步引入必须的各类包
import os
import tkinter
import tkinter.filedialog
import random
import time
import threading
import pygame
特别是pygame需要手动安装
pip install pygame
二、播放功能
首先选择音乐目录,然后创建播放现成,播放音乐。
# 播放按钮
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():
# global playing
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')
五、关闭
先结束现成,然后关闭窗体。
# 关闭程序时执行的代码
def closeWindow():
# 修改变量,结束线程中的循环
global playing
playing = False
time.sleep(0.3)
try:
# 停止播放,如果已停止,
# 再次停止时会抛出异常,所以放在异常处理结构中
pygame.mixer.music.stop()
pygame.mixer.quit()
except:
pass
root.destroy()
六、完整代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:livingbody
@file:music_play.py
@time:2022/04/19
"""
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)
musicName.set('playing....' + nextMusic)
pygame.mixer.music.load(nextMusic.encode())
# 播放一次
pygame.mixer.music.play(1)
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():
# global playing
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)
if __name__ == '__main__':
# 启动消息循环
root.mainloop()
七、改进
下一步,可加入播放列表,点选播放音乐,也可以拖动进度播放。
来源:https://juejin.cn/post/7088276815000813605


猜你喜欢
- 这个类可以用来搜索在给定的文本目录中的文件。 它可以给定目录遍历递归查找某些文件扩展名的文件。 并打开找到的文件,并检查他们是否包含搜索词语
- 一、安装selenium打开命令控制符输入:pip install -U selenium火狐浏览器安装firebug:www.firebu
- 本文总结了两种方法来导入opencv与numpy包,第一种是直接在Pycharm中导入两个包,第二种是在官网下载相关文件进行配置。本人比较推
- 【原理介绍】通过NETCONF,网管能够用可视化的界面统一管理网络中的设备,并且安全性高、可靠性强、扩展性强。如下图所示,网管与网络中的所有
- 实例如下所示:#!/usr/bin/python# -*- coding: UTF-8 -*-import reimport urllib,
- 本文实例讲述了Python学习笔记之读取文件、OS模块、异常处理、with as语法。分享给大家供大家参考,具体如下:文件读取#读取文件f
- aspx: <div id="selDiv" style=" z-index:100; visibili
- 在 MySQL 查询中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 DISTINCT
- Python实时数据采集-新型冠状病毒源代码 来源:https://github.com/Programming-With-Love/201
- 在该网站下载你所需要的mysql依赖驱动版本,比如我的QT版本是5.15就下5.15版的 按照你的Qt编译版本和机器位数进行下载,
- 这篇文章主要介绍了Python文件操作函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- Elasticsearch查询查询分类:基本查询:使用es内置查询条件进行查询组合查询:把多个查询组合在一起进行复合查询过滤:查询的同时,通
- 今天遇到一个需求,就是将一个list文件读取后,存入一个txt配置文件。存入时,发现list文件无法直接存入,必须转为str模式。但在读取t
- 简单的测试用例#!/usr/bin/python# -*- coding: UTF-8 -*-import timefrom pymongo
- 前言在linux有个命令叫做md5sum,能生成文件的md5值,一般情况下都会将结果记录到一个文件中用于校验使用,比如会这样使用:[craz
- 如下所示:函数说明type()返回数据结构类型(list、dict、numpy.ndarray 等)dtype()返回数据元素的数据类型(i
- 问题:windows环境下新建或编辑文本文件,保存时会在头部加上BOM。使用ftp上传到linux下,在执行时第一行即报错。以下方法可以去除
- 背景写一个python脚本,实现简单的http服务器功能:1.浏览器中输入网站地址:172.20.52.163:200142.server接
- 实现对下一个单词的预测RNN 原理自己找,这里只给出简单例子的实现代码import tensorflow as tfimport numpy
- 一张字体调整好的示例图:字体大小就是 fontsize 参数import matplotlib.pyplot as plt# 代码中的“..