前几期我们通过网络的一些接口爬虫能够实现了音乐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画出设计好的界面
然后利用PYUIC 转成py文件
界面代码如下:
# -*- 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播放器就完成了。
主要功能如下:
1.点击随机听,可随机播放网络上的任何音乐。播放的音乐自动下载到MP3的目录下面。
2.可通过音乐名称或歌手名称进行搜索,网上爬取对应的歌曲,点击播放 ,播放的歌曲自动下载到MP3的目录下面。
3.本地音乐播放,点击加载MP3目录所有的音乐进行播放。
具体代码已放到面包多上面,感兴趣的小伙伴可以去看看。
https://mbd.pub/o/bread/mbd-ZpWUlZ1q
限时福利:点击关注私信,可领取打包好的exe文件直接使用。