python在线音乐播放器_python实现音乐播放器
python是一个比较活泼的语言,它可以很快速、很方便地实现很多有意思的东西。
最近,学习了一下如何使用python制作一个简单的音乐播放器,整体的效果如下图所示。
所需要的导入的库
tkinter
os
time
threading
pygame
如果没有安装这个库,简单粗暴的
pip install + 库
例如,我没有安装过pygame这个库,
准备工作
下载音乐,喜欢的歌曲,选择mp3格式
这里,给大家提供一个mp3格式下载的网址,如果大家有其他合适的网址也可以的。
源码
import tkinter
import os
from tkinter import *
import tkinter.filedialog
import time
import threading
import pygame
from PIL import Image,ImageTk
#新建一个GUI界面
Frame = Tk()
Frame.title("属于自己的音乐播放器")
#设置长和款
width = 600
height = 400
screenwidth = Frame.winfo_screenwidth()
screenheight = Frame.winfo_screenheight()
alignstr = "%dx%d+%d+%d" % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
Frame.geometry(alignstr)
Frame.resizable(False,False)
file = Image.open('./music player/picture/image.jpg')
img = ImageTk.PhotoImage(file)
background = tkinter.Label(Frame, image=img)
background.image = img
background.pack()
#设置一个图标
#Frame.iconbitmap("")
#设置全局变量
folder = "" #文件路径
music_dir = [] #音乐文件路径
music_name = [] #音乐文件名称
num = 0 #当前所播放的音乐序号
playing = False #音乐是否在播放
flag= 0 #单曲循环 or 顺序播放
skip= 0 #上一首下一首的标记
#选择播放音乐所在文件夹
def buttonAddClick():
#global限定全局变量
global folder
global music_dir
global music_name
global playing
#选择一个文件夹并其返回路径
folder = tkinter.filedialog.askdirectory()
if not folder:
return
music_name.clear()
music_dir.clear()
#读取文件夹里的音乐文件
for each in os.listdir(folder):
if each.endswith((".mp3",".wav",".ogg")):
music_name.append(each)
music_dir.append(folder + "\\" + each)
if(len(music_dir) == 0):
return
#将文件名列出到GUI上
var = StringVar()
var.set(music_name)
music_list = Listbox(Frame,listvariable=var)
music_list.place(x=200,y=240,width=260,height=150)
playing = True
buttonPlay["state"] = "normal"
start_stop.set("播放")
buttonAdd["state"]="disabled"
pygame.mixer.init()
#播放音乐函数
def play():
global num
global playing
global flag
global skip
if len(music_dir):
pre=0 #上一首
while playing:
if not pygame.mixer.music.get_busy(): #没有音乐播放
if flag:
if not skip:
num=pre
skip = 0
next_music = music_dir[num]
pygame.mixer.music.load(next_music.encode())
pygame.mixer.music.play(1)
musicName.set("正在播放:"+music_name[num])
pre = num
if len(music_dir)-1 == num:
num = 0
else:
num = num + 1
else:
time.sleep(0.1)
#播放暂停切换
def buttonPlayClick():
buttonNext["state"] = "normal"
buttonPrev['state'] = 'normal'
buttonCircle['state'] = 'normal'
if start_stop.get() == "播放":
start_stop.set("暂停")
#新建一个线程来后台播放音乐
t=threading.Thread(target=play)
t.start()
elif start_stop.get() =="暂停":
pygame.mixer.music.pause()
start_stop.set("继续")
elif start_stop.get() =="继续":
pygame.mixer.music.unpause()
start_stop.set("暂停")
#回到上一首
def buttonPrevClick():
global skip
skip = 1
pygame.mixer.music.stop()
global num
if num == 0:
num=len(music_dir)-2
elif num ==1:
num = len(music_dir)-1
else:
num -= 2
#切换下一首
def buttonNextClick():
global skip
skip = 1
pygame.mixer.music.stop()
#播放模式的切换
def buttonCircClick():
global flag
if mode_change.get()=="单曲循环":
flag=1
mode_change.set("顺序播放")
else:
flag=0
mode_change.set("单曲循环")
#调整音量
def controlVoice(value):
global playing
if playing:
pygame.mixer.music.set_volume(float(value))
def closeWindow():
#playing 变 False,从而结束循环,t线程退出
global playing
playing = False
time.sleep(0.3)
if len(music_name) > 0:
pygame.mixer.music.stop()
pygame.mixer.quit()
Frame.destroy()
#设置关闭窗口协议
Frame.protocol("WM_DELETE_WINDOW", closeWindow)
#添加音乐按钮
buttonAdd = Button(Frame,text="添加音乐",command=buttonAddClick)
buttonAdd.place(x = 30,y = 210,width = 60,height = 30)
#播放/暂停按钮
start_stop = StringVar(Frame, value="播放")
buttonPlay = Button(Frame,textvariable = start_stop,command = buttonPlayClick)
buttonPlay.place(x = 100,y = 210,width = 60,height = 30)
buttonPlay["state"] = "disabled"
#下一首按钮
buttonNext = tkinter.Button(Frame,text = "下一首", command = buttonNextClick)
buttonNext.place(x =100,y = 250,width = 60,height = 30)
buttonNext["state"] = "disabled"
#上一首按钮
buttonPrev = tkinter.Button(Frame,text = "上一首", command = buttonPrevClick)
buttonPrev.place(x = 30,y = 250, width = 60, height = 30)
buttonPrev["state"] = "disabled"
#单曲循环/循序播放按钮
mode_change = StringVar(Frame, value = "单曲循环")
buttonCircle = tkinter.Button(Frame, textvariable = mode_change, command = buttonCircClick)
buttonCircle.place(x = 30, y = 290, width = 60, height = 30)
buttonCircle["state"]="disabled"
#当前播放音乐
musicName = StringVar(Frame,value = "暂时没有播放音乐")
labelName = Label(Frame,textvariable = musicName, justify = LEFT, fg = "red")
labelName.place(x = 200, y = 210, width = 260, height = 20)
#调节音量
labelvoice = Label(Frame, text = "音量", justify = LEFT)
labelvoice.place(x = 20, y = 350, width = 30, height = 20)
s = tkinter.Scale(Frame,from_ = 0, to = 1, orient = tkinter.HORIZONTAL, length = 200, resolution = 0.1, command = controlVoice)
s.set(1)
s.place(x = 50, y = 330, width = 100)
#循环刷新
Frame.mainloop()
最终效果
运行程序之后,可以选择“添加音乐”,然后选择本地的文件夹,用于选择需要播放的音乐。
在音乐列表中选择需要播放的音乐,然后就是出现正在播放的音乐。
大概效果就是这样的,之后还可以继续学习,将它改进成为
展示正在播放歌曲的歌词
首页的图片可以自动轮番播放
播放音乐mv
原文链接:https://blog.csdn.net/yql_617540298/article/details/112434047
python在线音乐播放器_python实现音乐播放器相关推荐
- python的网页解析器_python 之网页解析器
一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...
- python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...
- python grpc unary call错误_python的黑魔法-装饰器
python的装饰器 装饰器 简单的来说就是函数的函数,在执行目标函数时,先执行装饰器函数,很像HOOk 简单的装饰器 实现一个打印日志的装饰器 def myLogger(func):def wrap ...
- python自带网页解析器_python 之网页解析器
一.什么是网页解析器 1.网页解析器名词解释 首先让我们来了解下,什么是网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出& ...
- python什么是装饰器_python学习之装饰器是什么?
学完python函数,接下来我们跟着猿人学python一起来看看什么是装饰器. 大家应该多多少少在其它地方有看过或是听过"装饰器"这个词.装饰器,顾名思义,就是用来装饰的,它装饰的 ...
- python制作音乐播放器_python实现音乐播放器 python实现花框音乐盒子
本文实例为大家分享了python实现音乐播放器的具体代码,供大家参考,具体内容如下 """这是一个用海龟画图模块和pygame的混音模块制作的简易播放器. 作者:李兴球, ...
- python tkinter 循环显示文本_Python简易音乐播放器
上一篇介绍了点阵字展现动态歌词,后续的思路有一条是添加图形界面.这两天搜了下tkinter图形界面的帖子,做了个简单的播放器界面,听首<盗将行>感受下效果吧 Python图形界面 图形界面 ...
- python背景怎么自定义铃声_Python 制作音乐高潮副歌提取器
有些时候,我们为了设定手机铃声或者发抖音视频时,会耗费大量时间在音乐剪辑上.尤其是想发布大量抖音视频的时候,我们得收集大量的短音乐,这是一个相当耗费时间的工作.那么,这个音乐高潮的提取能不能自动化呢? ...
- python音乐可视化壁纸_Python 提取音乐频谱并可视化
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python使用宝典 PS:如有需要Python学习资料的小伙伴可以 ...
- python在线翻译小程序_Python爬虫学习之翻译小程序
本次博客分享的内容为基于有道在线翻译实现一个实时翻译小程序,本次任务是参考小甲鱼的书<零基础入门学习Python>完成的,书中代码对于当前的有道词典并不适用,使用后无法实现翻译功能,在网上 ...
最新文章
- extjs grid renderer用法
- Jquery string 和 json相互转换的方法
- 11467人力资源统计学在计算机,2013年至2017年自考11467《人力资源统计学》真题及答案.pdf...
- 毕业以来,今天第一次领到工资,好兴奋哪
- SAP CO模块权限控制
- lsof查看占用高_查看端口占用情况lsof,并关闭对应进程kill
- Java Web学习(四)http协议
- MyEclipse里运行Tomcat后,Console窗口里中文显示乱码
- springMVC使用与生成序列号
- nginx源码分析之IO多路复用流程
- 带有数据库的动态级联菜单
- 数学与编程——概率论与数理统计
- Linux编译libpcap
- Linux 4G/5G 驱动移植、实践测试记录
- java-assured_java - rest-assured 接口测试
- 我在周日凌晨执意顶着困意喝酒
- 遍历目录下的所有文件和文件夹
- 使用Requests库进行网页爬取
- Shell | 文件或关键字查询
- java 生成图片验证码结合struts2使用
热门文章
- 水晶报表for java_水晶报表(学习笔记)
- C语言求阶乘尾数零的个数
- selenium爬取京东笔记本电脑信息
- 微信小程序 简单动画入门
- 谭浩强《C程序设计》(第四版)错误不完全汇集
- Cisco ❀ 双向地址转换(源地址转换+地址映射)
- KYC (Know Your Customer) 综述篇
- 2021年一季度口腔护理行业网络关注度分析报告
- cad边长提取lisp_用lisp怎么提取cad中文字-内容-*通用符匹配(值 :设定)生成excel文件...
- 132 django模版文件的使用