基于Python实现音乐播放器的实现示例代码

 更新时间:2022年04月20日 08:52:31   作者:Livingbody  
这篇文章主要介绍了如何利用Python编写简易的音乐播放器,文中的示例代码讲解详细,具有一的参考价值,需要的小伙伴可以参考一下

一、环境设置

第一步引入必须的各类包

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音乐播放器的资料请关注脚本之家其它相关文章!

相关文章

  • 探索 Python Restful 接口测试的奥秘

    探索 Python Restful 接口测试的奥秘

    掌握Python Restful 接口测试,让你的后端服务像流水一样顺畅,本指南将带你轻松穿梭于断言和请求之间,搞定所有测试难题,一起来看,让代码在你的指尖跳舞吧!
    2023-12-12
  • Python 中 yeild 的用法详解

    Python 中 yeild 的用法详解

    yield 是 Python 中的关键字,用于生成器函数中,可以将函数变成一个迭代器,实现惰性计算,节省内存空间。本文将介绍 yield 的基本用法和实现原理,以及与 yield 相关的注意事项和常见问题。
    2023-06-06
  • Django开发web后端对比SpringBoot示例分析

    Django开发web后端对比SpringBoot示例分析

    这篇文章主要介绍了Django开发web后端对比SpringBoot示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • python编写微信远程控制电脑的程序

    python编写微信远程控制电脑的程序

    这篇文章主要介绍了python编写微信远程控制电脑的程序,使用python编写的基于邮件收发的远程控制电脑的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python实现JSON反序列化类对象的示例

    Python实现JSON反序列化类对象的示例

    本篇文章主要介绍了Python实现JSON反序列化类对象的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 详解如何使用Pytest进行自动化测试

    详解如何使用Pytest进行自动化测试

    这篇文章主要介绍了详解如何使用Pytest进行自动化测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python安装gdal的两种方法

    python安装gdal的两种方法

    这篇文章主要介绍了python安装gdal的两种方法,每种方法给大家介绍的都非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python从入门到精通(DAY 2)

    python从入门到精通(DAY 2)

    本文是python从入门到精通系列文章的第二篇,主要给大家简单讲解下Python的字典复制和内置函数,非常简单实用,需要的小伙伴可以参考下
    2015-12-12
  • 详谈Python高阶函数与函数装饰器(推荐)

    详谈Python高阶函数与函数装饰器(推荐)

    下面小编就为大家带来一篇详谈Python高阶函数与函数装饰器(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python Image模块基本图像处理操作小结

    Python Image模块基本图像处理操作小结

    这篇文章主要介绍了Python Image模块基本图像处理操作,结合实例形式总结分析了Python图形处理模块Image常用的图形处理函数、功能及相关使用技巧,需要的朋友可以参考下
    2019-04-04

最新评论