PyQt5实现简易音乐播放器
- 环境
- vscode
- python 3.10.0
- PyQt5 5.15.4
- 功能目标
能够读取本地的音乐文件,并实现播放的开关、曲目的切换和音量的加减
- 具体实现
- 新建一个文件夹,在文件夹下再新建一个文件夹,命名为music,将歌曲放入其中。在vscode中打开该文件夹。
- 在QtDesigner中搭建出UI界面,并使用pyuic工具转换为py文件
- 新建main.py文件,用于界面的显示
- 新建一个文件夹,在文件夹下再新建一个文件夹,命名为music,将歌曲放入其中。在vscode中打开该文件夹。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import sys from PyQt5 import QtCore, QtWidgets from PyQt5.QtWidgets import QMainWindow from Ui_musicplayer import Ui_Dialog class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) if __name__ == '__main__': # 屏幕适配处理 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() main = MainWin() main.show() sys.exit(app.exec_())
复制代码
1
24. 通过os.listdir()函数完成歌曲文件的读取
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19... # 省略之前出现的内容,后面的...同理 import os class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) # 歌曲存放目录 self.mp3filedir = "./music/" # 用于存放歌曲名称的空列表 self.music_list = [] # 当前播放歌曲在列表中的位置,开始为0 self.music_index = 0 # 从歌曲存放目录中读取所有文件名,并放入列表中 for file_name in os.listdir(self.mp3filedir): self.music_list.append(file_name) # 获取歌曲总数 self.music_all_num = len(self.music_list)
复制代码
1
25. 新建 QMediaPlayer对象,并完成音量的设置
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20... from PyQt5.QtCore import QUrl from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) ... # 新建QMediaPlayer对象 self.player = QMediaPlayer() # 当前播放状态标志位,False表示当前处于暂停状态,True表示当前处于播放状态 self.player_state = False # 音量设定 self.voice_level = 50 # 音量设置,0-100,设置为0将静音 self.player.setVolume(self.voice_level) # 拼接歌曲存放目录和歌曲名成完整路径,获取到文件 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index])))
复制代码
1
26. 歌曲名字的展示
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15... class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) ... # 歌曲名展示 self.music_detail() def music_detail(self): # 根据当前歌曲位置索引获取歌曲名 self.label.setText(self.music_list[self.music_index])
效果图
复制代码
1
27. 播放按钮绑定函数,t实现歌曲播放状态的切换
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24... class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) ... # 播放按钮绑定函数 self.pushButton.clicked.connect(self.player_state_change) def player_state_change(self): # 通过self.player_state获取当前播放状态,再进行切换 if self.player_state: # 停止播放 self.player.stop() # 播放状态标志设置为False self.player_state = False else: # 播放当前音频 self.player.play() # 播放状态标志设置为True self.player_state = True
复制代码
1
28. 歌曲上下切换按钮绑定函数,实现歌曲的切换
复制代码
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... class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) ... # 下一首按钮点击事件绑定函数 self.pushButton_2.clicked.connect(self.next_music) # 上一首按钮点击事件绑定函数 self.pushButton_3.clicked.connect(self.previous_music) def next_music(self): # 如果当前播放的音频位置索引为列表中最后一首,则位置索引置为0,回到列表开头 if self.music_index == self.music_all_num-1: self.music_index = 0 # 否则位置索引加1 else: self.music_index += 1 # 根据位置索引获取歌曲名,并和歌曲存放目录拼接获取文件 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index]))) # 歌曲名展示更新 self.music_detail() # 进行播放 self.player.play() def previous_music(self): # 如果当前播放的音频位置索引为列表中第一首,则位置索引置为列表长度减一,到列表末尾 if self.music_index == 0: self.music_index = self.music_all_num - 1 # 否则位置索引减1 else: self.music_index -= 1 # 根据位置索引获取歌曲名,并和歌曲存放目录拼接获取文件 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index]))) # 歌曲名展示更新 self.music_detail() # 进行播放 self.player.play()
复制代码
1
29. 音量的增减,直接修改音量设定值再执行次音量设定函数即可
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21... class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) ... self.pushButton_4.clicked.connect(self.voice_add) self.pushButton_5.clicked.connect(self.voice_reduce) def voice_add(self): if self.voice_level < 100: self.voice_level += 10 self.player.setVolume(self.voice_level) def voice_reduce(self): if self.voice_level > 0: self.voice_level -= 10 self.player.setVolume(self.voice_level)
- 主函数代码汇总
复制代码
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
112import sys import os from PyQt5 import QtCore, QtWidgets from PyQt5.QtWidgets import QMainWindow from PyQt5.QtCore import QUrl from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from Ui_musicplayer import Ui_Dialog class MainWin(QMainWindow, Ui_Dialog): def __init__(self, parent=None): super(MainWin, self).__init__(parent) self.setupUi(self) # 新建QMediaPlayer对象 self.player = QMediaPlayer() # 当前播放状态标志位,False表示当前处于暂停状态,True表示当前处于播放状态 self.player_state = False # 歌曲存放目录 self.mp3filedir = "./music/" # 用于存放歌曲名称的空列表 self.music_list = [] # 当前播放歌曲在列表中的位置 self.music_index = 0 # 音量设置 self.voice_level = 50 # 从歌曲存放目录中读取所有文件名,并放入列表中 for file_name in os.listdir(self.mp3filedir): self.music_list.append(file_name) # 获取歌曲总数 self.music_all_num = len(self.music_list) # 拼接歌曲存放目录和歌曲名成完整路径,获取到文件 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index]))) # 文件名展示 self.music_detail() # 音量设置 self.player.setVolume(self.voice_level) # 播放按钮绑定函数 self.pushButton.clicked.connect(self.player_state_change) # 下一首按钮绑定函数 self.pushButton_2.clicked.connect(self.next_music) # 上一首按钮绑定函数 self.pushButton_3.clicked.connect(self.previous_music) # 音量加按钮绑定函数 self.pushButton_4.clicked.connect(self.voice_add) # 音量减按钮绑定函数 self.pushButton_5.clicked.connect(self.voice_reduce) def player_state_change(self): # 通过self.player_state获取当前播放状态,再进行切换 if self.player_state: # 停止播放 self.player.stop() # 播放状态标志设置为False self.player_state = False else: # 播放当前音频 self.player.play() # 播放状态标志设置为True self.player_state = True def next_music(self): # 如果当前播放的音频位置索引为列表中最后一首,则位置索引置为0,回到列表开头 if self.music_index == self.music_all_num-1: self.music_index = 0 # 否则位置索引加1 else: self.music_index += 1 # 根据位置索引获取歌曲名,并和歌曲存放目录拼接获取文件 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index]))) # 歌曲名展示更新 self.music_detail() # 进行播放 self.player.play() def previous_music(self): # 如果当前播放的音频位置索引为列表中第一首,则位置索引置为列表长度减一,到列表末尾 if self.music_index == 0: self.music_index = self.music_all_num - 1 # 否则位置索引减1 else: self.music_index -= 1 # 根据位置索引获取歌曲名,并和歌曲存放目录拼接获取文件 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index]))) # 歌曲名展示更新 self.music_detail() # 进行播放 self.player.play() def music_detail(self): self.label.setText(self.music_list[self.music_index]) def voice_add(self): if self.voice_level < 100: self.voice_level += 10 self.player.setVolume(self.voice_level) def voice_reduce(self): if self.voice_level > 0: self.voice_level -= 10 self.player.setVolume(self.voice_level) if __name__ == '__main__': # 屏幕分辨率适配 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() main = MainWin() main.show() sys.exit(app.exec_())
- 布局文件
复制代码
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# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.groupBox = QtWidgets.QGroupBox(Dialog) self.groupBox.setGeometry(QtCore.QRect(0, 10, 401, 251)) self.groupBox.setObjectName("groupBox") self.label = QtWidgets.QLabel(self.groupBox) self.label.setGeometry(QtCore.QRect(10, 20, 381, 221)) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.layoutWidget = QtWidgets.QWidget(Dialog) self.layoutWidget.setGeometry(QtCore.QRect(0, 270, 401, 25)) self.layoutWidget.setObjectName("layoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget) self.pushButton_4.setObjectName("pushButton_4") self.horizontalLayout.addWidget(self.pushButton_4) self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget) self.pushButton_2.setObjectName("pushButton_2") self.horizontalLayout.addWidget(self.pushButton_2) self.pushButton = QtWidgets.QPushButton(self.layoutWidget) self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget) self.pushButton_3.setObjectName("pushButton_3") self.horizontalLayout.addWidget(self.pushButton_3) self.pushButton_5 = QtWidgets.QPushButton(self.layoutWidget) self.pushButton_5.setObjectName("pushButton_5") self.horizontalLayout.addWidget(self.pushButton_5) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.groupBox.setTitle(_translate("Dialog", "详情")) self.label.setText(_translate("Dialog", "TextLabel")) self.pushButton_4.setText(_translate("Dialog", "音量+")) self.pushButton_2.setText(_translate("Dialog", "上一首")) self.pushButton.setText(_translate("Dialog", "播放")) self.pushButton_3.setText(_translate("Dialog", "下一首")) self.pushButton_5.setText(_translate("Dialog", "音量-"))
最后
以上就是和谐机器猫最近收集整理的关于PyQt5实现简易音乐播放器PyQt5实现简易音乐播放器的全部内容,更多相关PyQt5实现简易音乐播放器PyQt5实现简易音乐播放器内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复