脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 基于Python实现音乐播放器的实现示例代码

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

2022-12-02 14:34Livingbody Python

这篇文章主要介绍了如何利用Python编写简易的音乐播放器,文中的示例代码讲解详细,具有一的参考价值,需要的小伙伴可以参考一下

一、环境设置

第一步引入必须的各类包

?
1
2
3
4
5
6
7
import os
import tkinter
import tkinter.filedialog
import random
import time
import threading
import pygame

特别是pygame需要手动安装

?
1
pip install pygame

二、播放功能

首先选择音乐目录,然后创建播放现成,播放音乐。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 播放按钮
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)

三、停止功能

很直接,直接停止播放,当然更改按钮状态也属常规操作。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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'

四、暂停与恢复

这个好理解,也是直接现成操作,加个判断,状态更改。

?
1
2
3
4
5
6
7
8
9
# 暂停与恢复,两个功能共用一个按钮
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')

五、关闭

先结束现成,然后关闭窗体。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 关闭程序时执行的代码
def closeWindow():
    # 修改变量,结束线程中的循环
    global playing
    playing = False
    time.sleep(0.3)
 
    try:
        # 停止播放,如果已停止,
        # 再次停止时会抛出异常,所以放在异常处理结构中
        pygame.mixer.music.stop()
        pygame.mixer.quit()
    except:
        pass
    root.destroy()

六、完整代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/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音乐播放器的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7088276815000813605

延伸 · 阅读

精彩推荐
  • Pythonpython 实现数组list 添加、修改、删除的方法

    python 实现数组list 添加、修改、删除的方法

    下面小编就为大家分享一篇python 实现数组list 添加、修改、删除的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    rongxq879810632021-01-28
  • Pythonpython反编译教程之2048小游戏实例

    python反编译教程之2048小游戏实例

    这篇文章主要给大家介绍了关于python反编译教程之2048小游戏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    meteor_yh4682021-09-13
  • PythonPython中的匿名函数使用简介

    Python中的匿名函数使用简介

    这篇文章主要介绍了Python中的匿名函数的使用,lambda是各个现代编程语言中的重要功能,需要的朋友可以参考下 ...

    廖雪峰3892020-06-14
  • PythonPyqt5将多个类组合在一个界面显示的完整示例

    Pyqt5将多个类组合在一个界面显示的完整示例

    这篇文章主要给大家介绍了关于Pyqt5将多个类组合在一个界面显示的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    咻哈4922021-12-30
  • PythonDjango url 路由匹配过程详解

    Django url 路由匹配过程详解

    这篇文章主要介绍了Django url 路由匹配过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    Guixian5172021-08-28
  • Pythonpython机器学习库scikit-learn:SVR的基本应用

    python机器学习库scikit-learn:SVR的基本应用

    这篇文章主要介绍了python机器学习库scikit-learn:SVR的基本应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    birdlove198711082021-07-22
  • Python浅谈Python numpy创建空数组的问题

    浅谈Python numpy创建空数组的问题

    今天遇到一个小小的问题,是关于numpy创建空数组,今天特地整理了这篇文章,文中作出了非常详细的介绍,对正在学习python的小伙伴们有很好的帮助,需要的朋友...

    馋学习的身子11622021-11-13
  • PythonPython使用PIL模块生成随机验证码

    Python使用PIL模块生成随机验证码

    这篇文章主要为大家详细介绍了Python使用PIL模块生成随机验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Fugui4602020-12-19