天天看点

PyQt5 实现 MP3播放器

作者:13妖工作室

前几期我们通过网络的一些接口爬虫能够实现了音乐mp3的获取,今天我们就利用PyQt5来完成界面,实现音乐的搜索下载和播放。在Python中,PyQt5是一个强大的GUI(图形用户界面)库,可以用来创建美观且功能丰富的桌面应用程序。结合之前通过爬虫获取到的音乐MP3资源,我们可以设计一个音乐搜索、下载与播放的应用。

以下是一个简化的流程:

1.	创建主窗口:使用PyQt5中的QMainWindow类作为基础,设置窗口的基本属性如大小、标题等。
2.	设计UI界面:添加必要的控件,比如搜索框(QLineEdit)、搜索按钮(QPushButton)、结果展示区域(QListWidget或QTableWidget)、下载按钮以及音乐播放器组件等。
3.	实现音乐搜索功能:当用户在搜索框输入关键词并点击搜索按钮时,调用之前爬虫项目的搜索功能,获取音乐信息,并在结果展示区域显示出来。
4.	实现音乐下载功能:当用户点击某一首歌的下载按钮时,根据歌曲ID或者链接,调用爬虫的下载方法下载对应的mp3文件。
5.	音乐播放功能:集成一个音乐播放器模块,可以选择PyQt5自带的QMediaPlayer或者其他音频处理库如pygame等,当用户选择一首歌后,读取其本地路径并开始播放。           

首先安装Pyqt5

pip install Pyqt5           

利用Qt Designer画出设计好的界面

PyQt5 实现 MP3播放器
PyQt5 实现 MP3播放器

然后利用PYUIC 转成py文件

PyQt5 实现 MP3播放器

界面代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(824, 639)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(20, 0, 791, 91))
        self.groupBox.setTitle("")
        self.groupBox.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.groupBox.setObjectName("groupBox")
        self.btnLocal = QtWidgets.QPushButton(self.groupBox)
        self.btnLocal.setGeometry(QtCore.QRect(660, 10, 113, 32))
        self.btnLocal.setObjectName("btnLocal")
        self.btnRadom = QtWidgets.QPushButton(self.groupBox)
        self.btnRadom.setGeometry(QtCore.QRect(660, 50, 113, 32))
        self.btnRadom.setObjectName("btnRadom")
        self.widget = QtWidgets.QWidget(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(40, 30, 611, 33))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.comboBox = QtWidgets.QComboBox(self.widget)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.horizontalLayout.addWidget(self.comboBox)
        self.linesearch = QtWidgets.QLineEdit(self.widget)
        self.linesearch.setObjectName("linesearch")
        self.horizontalLayout.addWidget(self.linesearch)
        self.btnSearch = QtWidgets.QPushButton(self.widget)
        self.btnSearch.setObjectName("btnSearch")
        self.horizontalLayout.addWidget(self.btnSearch)
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_2.setGeometry(QtCore.QRect(20, 90, 541, 401))
        self.groupBox_2.setObjectName("groupBox_2")
        self.gridLayout = QtWidgets.QGridLayout(self.groupBox_2)
        self.gridLayout.setObjectName("gridLayout")
        self.listViewWeb = QtWidgets.QListView(self.groupBox_2)
        self.listViewWeb.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.listViewWeb.setWordWrap(True)
        self.listViewWeb.setObjectName("listViewWeb")
        self.gridLayout.addWidget(self.listViewWeb, 0, 0, 1, 1)
        self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_3.setGeometry(QtCore.QRect(570, 90, 241, 401))
        self.groupBox_3.setObjectName("groupBox_3")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_3)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.listLocal = QtWidgets.QListView(self.groupBox_3)
        self.listLocal.setObjectName("listLocal")
        self.gridLayout_2.addWidget(self.listLocal, 0, 0, 1, 1)
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(10, 500, 801, 91))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.btnplay = QtWidgets.QToolButton(self.frame)
        self.btnplay.setGeometry(QtCore.QRect(80, 30, 26, 22))
        self.btnplay.setObjectName("btnplay")
        self.btnnext = QtWidgets.QToolButton(self.frame)
        self.btnnext.setGeometry(QtCore.QRect(120, 30, 26, 22))
        self.btnnext.setObjectName("btnnext")
        self.btnup = QtWidgets.QToolButton(self.frame)
        self.btnup.setGeometry(QtCore.QRect(40, 30, 26, 22))
        self.btnup.setObjectName("btnup")
        self.sVoice = QtWidgets.QSlider(self.frame)
        self.sVoice.setGeometry(QtCore.QRect(260, 30, 160, 22))
        self.sVoice.setOrientation(QtCore.Qt.Horizontal)
        self.sVoice.setObjectName("sVoice")
        self.btndown = QtWidgets.QToolButton(self.frame)
        self.btndown.setGeometry(QtCore.QRect(170, 30, 71, 22))
        self.btndown.setObjectName("btndown")
        self.textEdit = QtWidgets.QTextEdit(self.frame)
        self.textEdit.setGeometry(QtCore.QRect(575, 4, 221, 78))
        self.textEdit.setObjectName("textEdit")
        self.lblPic = QtWidgets.QLabel(self.frame)
        self.lblPic.setGeometry(QtCore.QRect(460, 10, 111, 71))
        self.lblPic.setObjectName("lblPic")
       # MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        #self.statusbar.setObjectName("statusbar")
       # MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.btnSearch.clicked.connect(self.btnSearch_click)
        self.btnRadom.clicked.connect(self.btnRadom_click)
        self.btnplay.clicked.connect(self.btnplay_click)
        self.btnLocal.clicked.connect(self.btnLocal_click)
        self.btnSearch.clicked.connect(self.btnSearch_click)

        self.sVoice.valueChanged[int].connect(self.VoicechangeValue)

        self.listLocal.clicked.connect(self.DoubleClickedLocal)
        self.listViewWeb.clicked.connect(self.DoubleClickedWeb)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "音乐播放器V1.0     开发者:13妖     微信号:clchyj"))
        self.btnLocal.setText(_translate("MainWindow", "加载本地音乐"))
        self.btnRadom.setText(_translate("MainWindow", "随机听"))
        self.label.setText(_translate("MainWindow", "选择来源"))
        self.comboBox.setItemText(0, _translate("MainWindow", "网易云"))
        self.comboBox.setItemText(1, _translate("MainWindow", "酷狗"))
        self.comboBox.setItemText(2, _translate("MainWindow", "酷我"))
        self.comboBox.setItemText(3, _translate("MainWindow", "音乐网"))
        self.btnSearch.setText(_translate("MainWindow", "搜索"))
        self.groupBox_2.setTitle(_translate("MainWindow", "搜索结果"))
        self.groupBox_3.setTitle(_translate("MainWindow", "本地列表"))
        self.btnplay.setText(_translate("MainWindow", "Play"))
        self.btnnext.setText(_translate("MainWindow", "Next"))
        self.btnup.setText(_translate("MainWindow", "Up"))
        self.btndown.setText(_translate("MainWindow", "Download"))
        self.lblPic.setText(_translate("MainWindow", "TextLabel"))

           

讲之前爬取音乐的代码绑定到相应的事件中,一个简易版的MP3播放器就完成了。

PyQt5 实现 MP3播放器
PyQt5 实现 MP3播放器

主要功能如下:

1.点击随机听,可随机播放网络上的任何音乐。播放的音乐自动下载到MP3的目录下面。

2.可通过音乐名称或歌手名称进行搜索,网上爬取对应的歌曲,点击播放 ,播放的歌曲自动下载到MP3的目录下面。

3.本地音乐播放,点击加载MP3目录所有的音乐进行播放。

具体代码已放到面包多上面,感兴趣的小伙伴可以去看看。

https://mbd.pub/o/bread/mbd-ZpWUlZ1q

限时福利:点击关注私信,可领取打包好的exe文件直接使用。