Python使用PySimpleGUI和Pygame编写一个MP3播放器
前言
闲来无事,做了MP3播放器练练手,主要是研究下PySimpleGUI的界面窗口设计。先上图,一睹为快。
一、来说说思路
文心一言提供
要使用PySimpleGUI和Pygame来创建一个MP3播放器,你需要完成以下步骤:
需求定义:
- 用户应能够通过一个图形用户界面(GUI)浏览并选择MP3文件。
- 播放器应有播放/暂停按钮,允许用户控制音乐的播放。
- 播放器应有一个音量控制滑块,允许用户调整音量。
- 播放器应有一个进度条,显示当前播放的位置和总长度。
- 用户应能够通过拖动进度条来控制播放的位置。
- 用户应能够删除已选择的MP3文件。
实现步骤:
安装PySimpleGUI和Pygame库:首先,你需要确保已经安装了这两个库。如果没有,你可以使用pip命令进行安装:
pip install PySimpleGUI pip install pygame
创建GUI布局:使用PySimpleGUI创建一个窗口,并设置一个FileBrowse元素用于选择MP3文件。你还需要为播放/暂停按钮,音量滑块,进度条和删除按钮设置相应的布局。
编写事件处理函数:你需要为FileBrowse元素,播放/暂停按钮,音量滑块,进度条和删除按钮分别编写事件处理函数。例如,当用户选择一个文件时,FileBrowse元素的事件处理函数将启动MP3播放。播放/暂停按钮的事件处理函数将控制音乐的播放/暂停。音量滑块的事件处理函数将调整音量。进度条的事件处理函数将更新播放的位置。删除按钮的事件处理函数将删除已选择的MP3文件。
集成Pygame音频播放:使用Pygame的mixer模块来播放MP3文件。你需要创建一个函数,当用户选择一个文件时,这个函数将调用mixer.music.load()加载文件,然后调用mixer.music.play()开始播放。你还需要编写暂停和恢复播放的函数。
测试并完善:最后,你需要测试你的MP3播放器,确保所有的功能都按照预期工作。你可能还需要添加一些错误处理代码,以处理例如文件不存在等可能出现的问题。
这只是一个基本的实现步骤。根据你的具体需求和偏好,你可能需要添加更多的功能和元素。
二、完整代码
(参考文心,自行修改)
import PySimpleGUI as sg import pygame import os,time sg.theme('LightGreen') layout = [ [sg.Text('选择MP3文件'), sg.Button('打开文件夹')], [sg.Listbox(values=[], size=(40, 10), key='music_list', enable_events=True)], [sg.Button('播放',key='play'), sg.Button('暂停',key='pause')], [sg.Text('音量'), sg.Slider(range=(0, 100), default_value=50, orientation='horizontal', key='volume', enable_events=True,)], ] window = sg.Window('MP3 播放器--IT里的交易员', layout) # 创建播放列表 music_list = [] # 初始化播放器 pygame.mixer.init() while True: event, values = window.read() if event == sg.WIN_CLOSED: break # 打开MP3文件所在文件夹,自动搜索MP3文件并创建播放列表 elif event == '打开文件夹': folder_path = sg.popup_get_folder('请选择文件夹', initial_folder=os.getcwd()) for file_name in os.listdir(folder_path): if file_name.endswith('.mp3'): music_list.append(os.path.join(folder_path, file_name)) window['music_list'].update(music_list) # 点击文件名后,自动开始播放,并将按钮修改为停止;如正在播放,点击计停止播放,并将按钮修改为播放 elif event == 'play': if pygame.mixer.music.get_busy(): pygame.mixer.music.stop() window['play'].update('播放') else: music = values['music_list'][0] if music: pygame.mixer.music.load(music) pygame.mixer.music.play() window['play'].update('停止') else: sg.popup("请打开MP3所在文件夹") # 点击文件名后,自动开始播放 elif event == 'music_list' and len(values['music_list']): music = values['music_list'][0] if music: pygame.mixer.music.load(music) pygame.mixer.music.play() window['play'].update('停止') else: sg.popup("请打开MP3所在文件夹") # 如果正在播放按了暂停,修改为继续;如果取消暂停则改为暂停 elif event == 'pause': if pygame.mixer.music.get_busy(): pygame.mixer.music.pause() window['pause'].update('继续') else: pygame.mixer.music.unpause() window['pause'].update('暂停') # 中途可以通过修改播放音量,为0-1。需要将显示的数据除以100得到修改值 elif event == 'volume': pygame.mixer.music.set_volume(values['volume'] / 100) window.close()
总结
本文通过对MP3文件播放,学习了PySimpleGUI和Pygame的基本操作,调测心得如下:
1、PySimpleGUI的layout 为界面构成,使用列表即可完成界面设计,这个很简单,对于设计简单的GUI交互界面确实很高效。key是操作这些界面元素的关键,当然也可以用界面文字,因为不好控制,最终增加了key来实现文字修改和操作。
2、event, values = window.read()。这里的event决定了相应哪个元素,values 可以读取到元素的值,也可以对其进行修改。
3、pygame.mixer即可实现MP3播放。具体函数见附录。
4、本来还想对播放列表实现增加删除,但觉得意义不大就取消了。
5、播放进度,和拖放进度功能,已实现播放中的显示,但是中途无法切换播放文件,和操作习惯不太相符,以后实现了再说。
附录
pygame.mixer.music.load() —— 载入一个音乐文件用于播放
pygame.mixer.music.play() —— 开始播放音乐流
pygame.mixer.music.rewind() —— 重新开始播放音乐
pygame.mixer.music.stop() —— 结束音乐播放
pygame.mixer.music.pause() —— 暂停音乐播放
pygame.mixer.music.unpause() —— 恢复音乐播放
pygame.mixer.music.fadeout() —— 淡出的效果结束音乐播放
pygame.mixer.music.set_volume() —— 设置音量
pygame.mixer.music.get_volume() —— 获取音量
pygame.mixer.music.get_busy() —— 检查是否正在播放音乐
pygame.mixer.music.set_pos() —— 设置播放的位置
pygame.mixer.music.get_pos() —— 获取播放的位置
pygame.mixer.music.queue() —— 将一个音乐文件放入队列中,并排在当前播放的音乐之后
pygame.mixer.music.set_endevent() —— 当播放结束时发出一个事件
pygame.mixer.music.get_endevent() —— 获取播放结束时发送的事件
Pygame 中播放音乐的模块和 pygame.mixer 模块是密切联系的。使用音乐模块去控制在调音器上的音乐播放。
以上就是Python使用PySimpleGUI和Pygame编写一个MP3播放器的详细内容,更多关于Python MP3播放器的资料请关注脚本之家其它相关文章!
相关文章
通过Folium在地图上展示数据Python地理可视化的入门示例详解
这篇文章主要介绍了通过Folium在地图上展示数据Python地理可视化的入门,在本文中,我们介绍了如何使用Python中的Folium库进行地理可视化,通过Folium,我们可以轻松地创建交互式地图,并在地图上展示数据、绘制形状、添加图例和文本标签等,需要的朋友可以参考下2024-05-05python测试开发django之使用supervisord 后台启动celery 服务(worker/beat)
Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统,这篇文章主要介绍了python测试开发django之使用supervisord 后台启动celery 服务(worker/beat),需要的朋友可以参考下2022-07-07
最新评论