前言
你常听音乐嘛?
在听的时候,有没有那么一瞬间
冒出一个小想法呢?
比如:拥有一个属于自己的音乐播放器
今天!就让我们来付诸行动,让想法变为现实
简易播放器
在开始我们正式的播放器之前
我们来看一个最简单的小播放器
只需要区区九行代码就可以实现噢~
首先导入模块
import time
import pygame
time是时间模块,属于内置,无需安装
pygame是第三方模块,需要安装
那么如何安装python第三方模块?
这里给大家说明:
win + R 输入 cmd 点击确定, 输入安装命令
pip install 模块名 (pip install 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()
效果展示:
多功能播放器
看到这个名字,多功能!!
那么相应的知识点也不能少,下面给大家整理
python基础知识 2. requests库 3. time
4. pygame 5. tkinter 6.线程
环境
windows
pycharm 2021.2
python 3.8
代码展示
导入模块
import os
import time
import tkinter
import tkinter.filedialog
import threading
import pygame # pip
root = tkinter.Tk()
root.title('音乐播放器')
root.geometry('460x600+500+100')
root.resizable(False,False) # 不能拉伸
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('\\','/'))
var2 = tkinter.StringVar()
var2.set(ret)
lb = tkinter.Listbox(root,listvariable=var2)
lb.place(x=50,y=100,width=260,height=300)
if not folder:
return
global playing
playing = True
根据情况禁用和启用相应的按钮
buttonPlay['state'] = 'normal'
buttonStop['state'] = 'normal'
# buttonPause['state'] = 'normal'
pause_resume.set('播放')
播放音乐
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 closeWindow():
修改变量,结束线程中的循环
global playing
playing = False
time.sleep(0.3)
停止播放,如果已停止,
再次停止时会抛出异常,所以放在异常处理结构中
try:
pygame.mixer.music.stop()
pygame.mixer.quit()
except:
pass
root.destroy()
声音控制
def control_voice(value=0.5):
pygame.mixer.music.set_volume(float(value))
上一首
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()
窗口关闭
root.protocol('WM_DELETE_WINDOW', closeWindow)
效果展示
尾语
好啦,本文章到这里就结束拉
有喜欢的小伙伴记得给博主一个三连哦~
希望你在学习的路上不忘初心,坚持不懈,学有所成
把时间和精力,放在自己擅长的方向,去坚持与努力,
如果不知道自己擅长什么,就尽快找到它。