Python使用PySimpleGUI和Pygame编写一个MP3播放器

 更新时间:2023年11月14日 11:29:34   作者:IT里的交易员  
这篇文章主要为大家详细介绍了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播放器的资料请关注脚本之家其它相关文章!

相关文章

  • 解决安装sklearn包失败问题

    解决安装sklearn包失败问题

    这篇文章主要介绍了解决安装sklearn包失败问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-10-10
  • Python基础之标准库和常用的第三方库案例教程

    Python基础之标准库和常用的第三方库案例教程

    这篇文章主要介绍了Python基础之标准库和常用的第三方库案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 浅谈Python爬取网页的编码处理

    浅谈Python爬取网页的编码处理

    下面小编就为大家带来一篇浅谈Python爬取网页的编码处理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 用Python批量把文件复制到另一个文件夹的实现方法

    用Python批量把文件复制到另一个文件夹的实现方法

    这篇文章主要介绍了用Python批量把文件复制到另一个文件夹的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 使用python实现扫描端口示例

    使用python实现扫描端口示例

    这篇文章主要介绍了使用python实现扫描端口示例,需要的朋友可以参考下
    2014-03-03
  • 教你用Python代码实现合并excel文件

    教你用Python代码实现合并excel文件

    近几天一直因为excel文件太多太杂的原因苦恼,今天特地整理了本篇文章,文章介绍的非常详细,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • python如何实现MK突变检验方法,代码复制修改可用

    python如何实现MK突变检验方法,代码复制修改可用

    这篇文章主要介绍了python如何实现MK突变检验方法,代码复制修改可用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 在Python中用GDAL实现矢量对栅格的切割实例

    在Python中用GDAL实现矢量对栅格的切割实例

    这篇文章主要介绍了在Python中用GDAL实现矢量对栅格的切割实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python 遍历循环详细

    Python 遍历循环详细

    这篇文章主要介绍的是Python 遍历循环,遍历循环可理解为从遍历结构中逐一提取元素,放在循环变量中,对于所提取的每个元素执行一次语句块。由保留字for和in组成,完整遍历所有元素后结束每次循环,所获得元素放入循环变量,并执行一次语句块,下面就来看文章介绍
    2021-10-10
  • Python装饰器基础详解

    Python装饰器基础详解

    装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。接下来通过本文给大家介绍python装饰器基础,对python装饰器相关知识感兴趣的朋友一起学习吧
    2016-03-03

最新评论