前言
就是用Python做一个简易的音乐播放器,废话不多说,咱们直接开干
当然,今天做这个肯定不是最简单的,最简单的音乐播放器,9行代码足以
import timeimport pygamefile = 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.线程
环境
windowspycharm .2python 3.8完整代码,运行即可,记得👍👍👍(直接明示了)
# 导入import osimport timeimport tkinterimport tkinter.filedialogimport threadingimport pygame # piproot = tkinter.Tk()root.title('音乐播放器')root.geometry('460x600+500+100')root.resizable(False,False) # 不能拉伸folder =''res = []num = 0now_music = ''def buttonChooseClick():"""添加文件夹:return:"""global folderglobal resif not folder:folder = tkinter.filedialog.askdirectory()musics = [folder + '\\' + musicfor 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:returnglobal playingplaying = True# 根据情况禁用和启用相应的按钮buttonPlay['state'] = 'normal'buttonStop['state'] = 'normal'# buttonPause['state'] = 'normal'pause_resume.set('播放')def play():"""播放音乐:return:"""if len(res):pygame.mixer.init()global numwhile 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 = 0else:num = num + 1netxMusic = netxMusic.split('\\')[1:]musicName.set('playing......' + ''.join(netxMusic))else:time.sleep(0.1)def buttonPlayClick():"""点击播放:return:"""buttonNext['state'] = 'normal'buttonPrev['state'] = 'normal'# 选择要播放的音乐文件夹if pause_resume.get() == '播放':pause_resume.set('暂停')global folderif not folder:folder = tkinter.filedialog.askdirectory()if not folder:returnglobal playingplaying = 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():"""停止播放:return:"""global playingplaying = Falsepygame.mixer.music.stop()def buttonNextClick():"""下一首:return:"""global playingplaying = Falsepygame.mixer.music.stop()global numif len(res) == num:num = 0playing = True# 创建线程播放音乐,主线程用来接收用户操作t = threading.Thread(target=play)t.start()def closeWindow():"""关闭窗口:return:"""# 修改变量,结束线程中的循环global playingplaying = Falsetime.sleep(0.3)try:# 停止播放,如果已停止,# 再次停止时会抛出异常,所以放在异常处理结构中pygame.mixer.music.stop()pygame.mixer.quit()except:passroot.destroy()def control_voice(value=0.5):"""声音控制:param value: 0.0-1.0:return:"""pygame.mixer.music.set_volume(float(value))def buttonPrevClick():"""上一首:return:"""global playingplaying = Falsepygame.mixer.music.stop()## pygame.mixer.quit()global num# num += 1# num -= 1if num == 0:num = len(res) - 2# num -= 1elif num == len(res) - 1:num -= 2else:num -= 2# num -= 1print(num)playing = True# 创建一个线程来播放音乐,当前主线程用来接收用户操作t = threading.Thread(target=play)t.start()# 窗口关闭root.protocol('WM_DELETE_WINDOW', closeWindow)# 添加按钮buttonChoose = tkinter.Button(root,text='添加',command=buttonChooseClick)# 布局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)buttonPlay.place(x=190,y=10,width=50,height=20)buttonPlay['state'] = 'disabled'# 停止按钮buttonStop = tkinter.Button(root, text='停止',command=buttonStopClick)buttonStop.place(x=120, y=10, width=50, height=20)buttonStop['state'] = 'disabled'# 下一首buttonNext = tkinter.Button(root, text='下一首',command=buttonNextClick)buttonNext.place(x=260, y=10, width=50, height=20)buttonNext['state'] = 'disabled'# 上一首buttonPrev = tkinter.Button(root, text='上一首',command=buttonPrevClick)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=10, y=30, width=260, height=20)# 音量控制# HORIZONTAL表示为水平放置,默认为竖直,竖直为verticals = 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=200)# 显示root.mainloop()
效果展示
简易版的
还有个半成品的,目前代码没写完
导入模块
import osimport timeimport tkinterimport tkinter.filedialogimport threadingimport pygame
一、界面
root = tkinter.Tk()root.title('音乐播放器')root.geometry('460x600+500+100')root.resizable(False,False) # 不能拉伸# 显示root.mainloop()
按钮
# 添加按钮buttonChoose = tkinter.Button(root,text='添加')# 布局buttonChoose.place(x=50,y=10,width=50,height=20)# 播放按钮pause_resume = tkinter.StringVar(root,value='播放')buttonPlay = tkinter.Button(root,textvariable=pause_resume)buttonPlay.place(x=190,y=10,width=50,height=20)buttonPlay['state'] = 'disabled'# 停止按钮buttonStop = tkinter.Button(root, text='停止')buttonStop.place(x=120, y=10, width=50, height=20)buttonStop['state'] = 'disabled'# 下一首buttonNext = tkinter.Button(root, text='下一首')buttonNext.place(x=260, y=10, width=50, height=20)buttonNext['state'] = 'disabled'# 上一首buttonPrev = tkinter.Button(root, text='上一首')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=10, y=30, width=260, height=20)# 音量控制# HORIZONTAL表示为水平放置,默认为竖直,竖直为verticals = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL,length=240, showvalue=0, tickinterval=2, resolution=0.1)s.place(x=50, y=50, width=200)
二、功能
创建一个文件目录
folder =''res = []num = 0now_music = ''
音乐读取功能
def buttonChooseClick():global folderglobal resif not folder:folder = tkinter.filedialog.askdirectory()musics = [folder + '\\' + musicfor 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:returnglobal playingplaying = 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 numwhile 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 = 0else:num = num + 1netxMusic = 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 folderif not folder:folder = tkinter.filedialog.askdirectory()if not folder:returnglobal playingplaying = 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 playingplaying = Falsepygame.mixer.music.stop()
下一首
def buttonNextClick():global playingplaying = Falsepygame.mixer.music.stop()global numif len(res) == num:num = 0playing = True# 创建线程播放音乐,主线程用来接收用户操作t = threading.Thread(target=play)t.start()
上一首
def buttonPrevClick():global playingplaying = Falsepygame.mixer.music.stop()## pygame.mixer.quit()global num# num += 1# num -= 1if num == 0:num = len(res) - 2# num -= 1elif num == len(res) - 1:num -= 2else:num -= 2# num -= 1print(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 playingplaying = Falsetime.sleep(0.3)try:# 停止播放,如果已停止,# 再次停止时会抛出异常,所以放在异常处理结构中pygame.mixer.music.stop()pygame.mixer.quit()except:passroot.destroy()
---------------------
作者:松鼠爱吃饼干
来源:CSDN
原文:/m0_48405781/article/details/122947011?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-1.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-1.nonecase
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件