基于Python制作简单的音乐播放器
介绍
这是一个简单的音乐播放器程序,使用了Python的tkinter库和pygame库。程序的主要功能包括:
- 添加音乐文件夹
- 播放音乐
- 暂停/继续播放
- 停止播放
- 下一首
- 上一首
- 音量控制
实现思路
程序首先导入了所需的库,然后创建了一个tkinter窗口,设置了窗口标题、大小和不可拉伸。
接下来,定义了几个全局变量,如文件夹路径、音乐列表、当前播放的音乐索引等。然后定义了几个函数,如buttonChooseClick、play、buttonPlayClick、buttonStopClick、buttonNextClick、buttonPrevClick、control_voice等。
buttonChooseClick函数用于选择要播放的音乐文件夹,并显示音乐列表。play函数用于播放音乐,使用pygame库实现。buttonPlayClick函数用于开始播放音乐,buttonStopClick函数用于停止播放音乐,buttonNextClick函数用于播放下一首音乐,buttonPrevClick函数用于播放上一首音乐。control_voice函数用于控制音量。
最后,定义了几个按钮的点击事件,并设置了按钮的状态(如禁用和启用),以及窗口的关闭事件。
在root.mainloop()中,程序开始运行,显示窗口,等待用户操作。
实现代码
首先要下载一些音乐到本地
然后就可以附源码了:
# 导入 import os import time import tkinter import tkinter.filedialog import threading import pygame root = tkinter.Tk() root.title('音乐播放器') root.geometry('460x600+500+100') root.resizable(False,False) # 不能拉伸 folder ='' res = [] num = 0 now_music = '' num1 = 100 def buttonChooseClick(): """ 添加文件夹 :return: """ 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=110,width=360,height=400) if not folder: return global playing playing = True # 根据情况禁用和启用相应的按钮 buttonPlay['state'] = 'normal' buttonStop['state'] = 'normal' # =buttonPause['state'] = 'normal' pause_resume.set('播放') def play(): """ 播放音乐 :return: """ 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(): """ 点击播放 :return: """ 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(): """ 停止播放 :return: """ global playing playing = False pygame.mixer.music.stop() def buttonNextClick(): """ 下一首 :return: """ 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(): """ 关闭窗口 :return: """ # 修改变量,结束线程中的循环 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): """ 声音控制 :param value: 0.0-1.0 :return: """ pygame.mixer.music.set_volume(float(value)) def buttonPrevClick(): """ 上一首 :return: """ 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) # 添加按钮 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表示为水平放置,默认为竖直,竖直为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=200) # 显示 root.mainloop()
效果图
到此这篇关于基于Python制作简单的音乐播放器的文章就介绍到这了,更多相关Python音乐播放器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决tensorflow测试模型时NotFoundError错误的问题
今天小编就为大家分享一篇解决tensorflow测试模型时NotFoundError错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-07-07对python中字典keys,values,items的使用详解
今天小编就为大家分享一篇对python中字典keys,values,items的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-02-02解决Python找不到ssl模块问题 No module named _ssl的方法
这篇文章主要介绍了解决Python找不到ssl模块问题 No module named _ssl的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-04-04
最新评论