赞
踩
Python做一个简易的音乐播放器
简易音乐播放器
- import time
- import pygame
-
- file = r'歌曲路径'
- pygame.mixer.init()
- print('正在播放',file)
- track = pygame.mixer.music.load(file)
- pygame.mixer.music.play()
- time.sleep(130)
- pygame.mixer.music.stop()
运行效果:
开始搭建音乐播放器
首先了解项目知识点和所需模块
1.python基础知识
2.requests库
3.time
4.pygame
5.tkinter
6.线程
环境
windows
pycharm 2021.2
python 3.7
先看一下运行效果:
代码讲解:
导入模块
- import os
- import time
- import tkinter
- import tkinter.filedialog
- import threading
- import pygame
一、界面
- root = tkinter.Tk()
- root.title('音乐播放器')
- root.geometry('460x500+500+100')
- root.resizable(False,False) # 不能拉伸
-
- # 创建一个 ttk 样式
- style = ttk.Style()
-
- # 设置框架的背景颜色
- # style.configure("TFrame", background="#98F5F9")
-
- # 设置前景颜色和边框颜色
- style.configure("TFrame", background="#98F5F9", foreground="#000000", bordercolor="#000000")
-
-
- frame = ttk.Frame(root, width=460, height=500)
- frame.pack()
-
- # 显示
- root.mainloop()
按钮
-
- # 添加按钮
- buttonChoose = tkinter.Button(root,text='添加',command=buttonChooseClick,fg="#000000",bg="#EFCDF8")
- # 布局
- buttonChoose.place(x=50,y=10,width=50,height=20)
-
-
-
- # 播放按钮
- pause_resume = tkinter.StringVar(root,value='播放')
- buttonPlay = tkinter.Button(root,textvariable=pause_resume,command=buttonPlayClick,fg="#000000",bg="#B2F199")
- buttonPlay.place(x=120,y=10,width=50,height=20)
- buttonPlay['state'] = 'disabled'
-
-
- # 停止按钮
- buttonStop = tkinter.Button(root, text='停止',command=buttonStopClick,fg="#000000",bg="#F8B6B6")
- buttonStop.place(x=190, y=10, width=50, height=20)
- buttonStop['state'] = 'disabled'
-
- # 下一首
- buttonNext = tkinter.Button(root, text='下一首',command=buttonNextClick,fg="#000000",bg="#F6E3C4")
- buttonNext.place(x=260, y=10, width=50, height=20)
- buttonNext['state'] = 'disabled'
- # 上一首
- buttonPrev = tkinter.Button(root, text='上一首',command=buttonPrevClick,fg="#000000",bg="#F6E3C4")
- buttonPrev.place(x=330, y=10, width=50, height=20)
- buttonPrev['state'] = 'disabled'
-
-
- # 标签
- musicName = tkinter.StringVar(root, value='暂时没有播放音乐...')
- labelName = tkinter.Label(root, textvariable=musicName)
- labelName.place(x=50, y=30, width=330, height=20)
-
- # 音量控制
- # HORIZONTAL表示为水平放置,默认为竖直,竖直为vertical
- s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL,
- length=240, showvalue=0, tickinterval=2, resolution=0.1,command=control_voice)
- s.place(x=50, y=50, width=330)
二、功能
创建一个文件目录
- folder =''
- res = []
- num = 0
- now_music = ''
音乐读取功能
- def buttonChooseClick():
- global folder
- global res
- if not folder:
- folder = tkinter.filedialog.askdirectory()
- musics = [folder + '\\' + music
- for music in os.listdir(folder) \
- \
- if music.endswith(('.mp3','.wav','.ogg'))]
- ret = []
- for i in musics:
- ret.append(i.split('\\')[1:])
- res.append(i.replace('\\','/'))
-
- if not folder:
- return
-
- global playing
- playing = True
- # 根据情况禁用和启用相应的按钮
- buttonPlay['state'] = 'normal'
- buttonStop['state'] = 'normal'
- # buttonPause['state'] = 'normal'
- pause_resume.set('播放')
显示已加载的音乐
- var2 = tkinter.StringVar()
- var2.set(ret)
- lb = tkinter.Listbox(root,listvariable=var2)
- lb.place(x=50,y=100,width=260,height=300)
播放音乐
- def play():
- if len(res):
- pygame.mixer.init()
- global num
- while playing:
- if not pygame.mixer.music.get_busy():
- netxMusic = res[num]
- print(netxMusic)
- print(num)
- pygame.mixer.music.load(netxMusic.encode())
- # 播放
- pygame.mixer.music.play(1)
- if len(res) -1 == num:
- num = 0
- else:
- num = num + 1
- netxMusic = netxMusic.split('\\')[1:]
- musicName.set('playing......' + ''.join(netxMusic))
- else:
- time.sleep(0.1)
-
- # 点击播放
- def buttonPlayClick():
- buttonNext['state'] = 'normal'
-
- buttonPrev['state'] = 'normal'
- # 选择要播放的音乐文件夹
- if pause_resume.get() == '播放':
- pause_resume.set('暂停')
- global folder
-
- if not folder:
- folder = tkinter.filedialog.askdirectory()
-
- if not folder:
- return
-
- global playing
-
- playing = True
-
- # 创建一个线程来播放音乐,当前主线程用来接收用户操作
- t = threading.Thread(target=play)
- t.start()
-
- elif pause_resume.get() == '暂停':
- # pygame.mixer.init()
- pygame.mixer.music.pause()
-
- pause_resume.set('继续')
-
- elif pause_resume.get() == '继续':
- # pygame.mixer.init()
- pygame.mixer.music.unpause()
-
- pause_resume.set('暂停')
停止播放
- def buttonStopClick():
- global playing
- playing = False
- pygame.mixer.music.stop()
下一首
- def buttonNextClick():
- global playing
- playing = False
- pygame.mixer.music.stop()
- global num
- if len(res) == num:
- num = 0
-
- playing = True
- # 创建线程播放音乐,主线程用来接收用户操作
- t = threading.Thread(target=play)
- t.start()
上一首
- def buttonPrevClick():
- global playing
- playing = False
- pygame.mixer.music.stop()
- #
- # pygame.mixer.quit()
- global num
- # num += 1
- # num -= 1
- if num == 0:
- num = len(res) - 2
- # num -= 1
- elif num == len(res) - 1:
- num -= 2
- else:
- num -= 2
- # num -= 1
- print(num)
- playing = True
- # 创建一个线程来播放音乐,当前主线程用来接收用户操作
- t = threading.Thread(target=play)
- t.start()
音量控制
- def control_voice(value=0.5):
- pygame.mixer.music.set_volume(float(value))
关闭窗口
- def closeWindow():
- # 修改变量,结束线程中的循环
- global playing
- playing = False
- time.sleep(0.3)
-
- try:
- # 停止播放,如果已停止,
- # 再次停止时会抛出异常,所以放在异常处理结构中
- pygame.mixer.music.stop()
- pygame.mixer.quit()
-
- except:
- pass
- root.destroy()
完整代码已经上传到CSDN,0积分下载,有需要的朋友自行下载。
感谢大家的阅读,觉得有所帮助的朋友点点关注点点赞!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。