一、环境设置
第一步引入必须的各类包
import os import tkinter import tkinter.filedialog import random import time import threading import pygame
特别是pygame需要手动安装
pip install pygame
二、播放功能
首先选择音乐目录,然后创建播放现成,播放音乐。
# 播放按钮 def buttonplayclick(): # 选择要播放的音乐文件夹 global folder if not folder: folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = true # 创建一个线程来播放音乐,当前主线程用来接收用户操作 t = threading.thread(target=play) t.start() # 根据情况禁用和启用相应的按钮 buttonplay['state'] = 'disabled' buttonstop['state'] = 'normal' buttonpause['state'] = 'normal' buttonnext['state'] = 'normal' pause_resume.set('pause') buttonplay = tkinter.button(root, text='play', command=buttonplayclick) buttonplay.place(x=20, y=10, width=50, height=20)
三、停止功能
很直接,直接停止播放,当然更改按钮状态也属常规操作。
def buttonstopclick(): global playing playing = false pygame.mixer.music.stop() musicname.set('暂时没有播放音乐') buttonplay['state'] = 'normal' buttonstop['state'] = 'disabled' buttonpause['state'] = 'disabled' buttonnext['state'] = 'disabled' global folder folder = '' buttonstop = tkinter.button(root, text='stop', command=buttonstopclick) buttonstop.place(x=80, y=10, width=50, height=20) buttonstop['state'] = 'disabled'
四、暂停与恢复
这个好理解,也是直接现成操作,加个判断,状态更改。
# 暂停与恢复,两个功能共用一个按钮 def buttonpauseclick(): # global playing if pause_resume.get() == 'pause': pygame.mixer.music.pause() pause_resume.set('resume') elif pause_resume.get() == 'resume': pygame.mixer.music.unpause() pause_resume.set('pause')
五、关闭
先结束现成,然后关闭窗体。
# 关闭程序时执行的代码 def closewindow(): # 修改变量,结束线程中的循环 global playing playing = false time.sleep(0.3) try: # 停止播放,如果已停止, # 再次停止时会抛出异常,所以放在异常处理结构中 pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy()
六、完整代码
#!/usr/bin/python # -*- coding: utf-8 -*- """ @author:livingbody @file:music_play.py @time:2022/04/19 """ import os import tkinter import tkinter.filedialog import random import time import threading import pygame folder = '' def play(): # folder用来表示存放mp3音乐文件的文件夹 global folder musics = [folder + '' + music for music in os.listdir(folder) if music.endswith(('.mp3', '.wav', '.ogg'))] # 初始化混音器设备 pygame.mixer.init() while playing: if not pygame.mixer.music.get_busy(): # 随机播放一首歌曲 nextmusic = random.choice(musics) musicname.set('playing....' + nextmusic) pygame.mixer.music.load(nextmusic.encode()) # 播放一次 pygame.mixer.music.play(1) else: time.sleep(0.3) root = tkinter.tk() root.title('音乐播放器v1.0') root.geometry('280x70+400+300') root.resizable(false, false) # 关闭程序时执行的代码 def closewindow(): # 修改变量,结束线程中的循环 global playing playing = false time.sleep(0.3) try: # 停止播放,如果已停止, # 再次停止时会抛出异常,所以放在异常处理结构中 pygame.mixer.music.stop() pygame.mixer.quit() except: pass root.destroy() root.protocol('wm_delete_window', closewindow) pause_resume = tkinter.stringvar(root, value='notset') playing = false # 播放按钮 def buttonplayclick(): # 选择要播放的音乐文件夹 global folder if not folder: folder = tkinter.filedialog.askdirectory() if not folder: return global playing playing = true # 创建一个线程来播放音乐,当前主线程用来接收用户操作 t = threading.thread(target=play) t.start() # 根据情况禁用和启用相应的按钮 buttonplay['state'] = 'disabled' buttonstop['state'] = 'normal' buttonpause['state'] = 'normal' buttonnext['state'] = 'normal' pause_resume.set('pause') buttonplay = tkinter.button(root, text='play', command=buttonplayclick) buttonplay.place(x=20, y=10, width=50, height=20) # 停止按钮 def buttonstopclick(): global playing playing = false pygame.mixer.music.stop() musicname.set('暂时没有播放音乐') buttonplay['state'] = 'normal' buttonstop['state'] = 'disabled' buttonpause['state'] = 'disabled' buttonnext['state'] = 'disabled' global folder folder = '' buttonstop = tkinter.button(root, text='stop', command=buttonstopclick) buttonstop.place(x=80, y=10, width=50, height=20) buttonstop['state'] = 'disabled' # 暂停与恢复,两个功能共用一个按钮 def buttonpauseclick(): # global playing if pause_resume.get() == 'pause': pygame.mixer.music.pause() pause_resume.set('resume') elif pause_resume.get() == 'resume': pygame.mixer.music.unpause() pause_resume.set('pause') buttonpause = tkinter.button(root, textvariable=pause_resume, command=buttonpauseclick) buttonpause.place(x=140, y=10, width=50, height=20) buttonpause['state'] = 'disabled' # 下一首音乐 def buttonnextclick(): global playing playing = false pygame.mixer.music.stop() pygame.mixer.quit() buttonplayclick() buttonnext = tkinter.button(root, text='next', command=buttonnextclick) buttonnext.place(x=200, y=10, width=50, height=20) buttonnext['state'] = 'disabled' musicname = tkinter.stringvar(root, value='暂时没有播放音乐...') labelname = tkinter.label(root, textvariable=musicname) labelname.place(x=0, y=40, width=270, height=20) if __name__ == '__main__': # 启动消息循环 root.mainloop()
七、改进
下一步,可加入播放列表,点选播放音乐,也可以拖动进度播放。
以上就是基于python实现音乐播放器的实现示例代码的详细内容,更多关于python音乐播放器的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!
需要了解更多python教程分享基于Python实现音乐播放器的实现示例代码,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/pythontutorial/1086105.html