python在线音乐播放器_python实现音乐播放器「建议收藏」

python在线音乐播放器_python实现音乐播放器「建议收藏」python是一个比较活泼的语言,它可以很快速、很方便地实现很多有意思的东西。最近,学习了一下如何使用python制作一个简单的音乐播放器,整体的效果如下图所示。所需要的导入的库tkinterostimethreadingpygame如果没有安装这个库,简单粗暴的pipinstall+库例如,我没有安装过pygame这个库,准备工作下载音乐,喜欢的歌曲,选择mp3格式这里,给大家提供一个…

大家好,又见面了,我是你们的朋友全栈君。

python是一个比较活泼的语言,它可以很快速、很方便地实现很多有意思的东西。

最近,学习了一下如何使用python制作一个简单的音乐播放器,整体的效果如下图所示。

e4f22b288ef860939f09397c8069c9ff.png

所需要的导入的库

tkinter

os

time

threading

pygame

如果没有安装这个库,简单粗暴的

pip install + 库

例如,我没有安装过pygame这个库,

09720a206a9b69dedfc703daccf1bfb5.png

准备工作

下载音乐,喜欢的歌曲,选择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()

最终效果

2af4e4ecec1e057a8fc9ac13f3061277.png

a762198162b179ffbcbaf642313b553b.png

运行程序之后,可以选择“添加音乐”,然后选择本地的文件夹,用于选择需要播放的音乐。

05c9d5e7e785e5c695138532bb54a298.png

08eb12e120b2ab3e6c9a4112bfd39d19.png

在音乐列表中选择需要播放的音乐,然后就是出现正在播放的音乐。

大概效果就是这样的,之后还可以继续学习,将它改进成为

展示正在播放歌曲的歌词

首页的图片可以自动轮番播放

播放音乐mv

原文链接:https://blog.csdn.net/yql_617540298/article/details/112434047

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153214.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 三条平行线与等边三角形

    三条平行线与等边三角形偶然在网上看到一道有意思的几何题,仔细思考了一下,确实有点趣。原题是:平面上有任意三条平行线,使用尺规则作图画出一个等边三角形,使三角形的三个顶点分别在三条平行线上。画法有好多种,搜集网上的一些画法,先介绍4种,再讨论一下三角形连长与平等线距离的关系,最后讨论下第二种画法的变化(三角形边长的唯一性未证明)。第一种:作图顺序:(颜色顺序:红—>绿—>蓝—>紫)1.在三条…

    2022年9月20日
    3
  • mysql多表左链接查询

    mysql多表左链接查询mysql多表左链接查询

    2022年4月24日
    44
  • win10\Win10系统禁止自动更新[通俗易懂]

    win10\Win10系统禁止自动更新[通俗易懂]win10专业版禁止自动更新(本人亲测无误后发布)解决方案:1.按下“windows+R”打开win10运行框;2.在运行框中输入“gpedit.msc”命令打开win10的本地组策略编辑器;3.在左侧:计算机配置菜单栏找到“管理模板”,紧接着点开当前菜单找到”windows组件“;4.最后在”Windows组件“中:找到Windows更新菜单栏点开:选中”配置自动更新“右键…

    2022年6月2日
    34
  • pycharm中安装django_pycharm环境配置教程

    pycharm中安装django_pycharm环境配置教程原文转载自:http://www.cnblogs.com/hwtmhj/p/6746151.html本人在安装Django的时候,试了很多安装教程均出错,选在这篇博文的的方法二(pycharm中利用其强大的类库进行安装)没有出错!近期做那个python的开发,今天就来简单的写一下开发路线的安装及配置,开发路线Python3.6.1+Pycharm5.0.6+Django1.11+

    2022年8月29日
    6
  • win10多合一原版系统_win10多合一原版系统[通俗易懂]

    win10多合一原版系统_win10多合一原版系统[通俗易懂]win10多合一原版系统装机系统拥有着大多数同类型定位的装机系统所没有的强大稳定性可以确保系统在运行的过程中绝对不会因为一些小毛病而出现崩溃的现象,对win10多合一原版系统装机系统感兴趣的朋友们快下载吧。win10多合一原版系统介绍:1、在不影响大多数软件和硬件操作的情况下,尽可能关闭不必要的服务。2、电脑兼容通用驱动助手,可以智能判断硬件类型并安装最兼容的驱动。3、综合2000-2020年流行…

    2022年6月16日
    85
  • goland 2022 永久激活码_在线激活2022.03.13「建议收藏」

    (goland 2022 永久激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月2日
    2.9K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号