laitimes

PyQt5 implements MP3 players

author:13 Demon Studios

In the previous issues, we were able to obtain music mp3 through some interface crawlers on the network, and today we will use PyQt5 to complete the interface to realize the search, download and playback of music. In Python, PyQt5 is a powerful GUI (Graphical User Interface) library that can be used to create beautiful and feature-rich desktop applications. Combined with the music MP3 resources obtained by crawling before, we can design an application for music search, download and playback.

Here's a simplified process:

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

Install Pyqt5 first

pip install Pyqt5           

Use Qt Designer to draw a well-designed interface

PyQt5 implements MP3 players
PyQt5 implements MP3 players

Then use PYUIC to convert to a py file

PyQt5 implements MP3 players

The interface code is as follows:

# -*- 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"))

           

Before talking about the code of crawling music, bind it to the corresponding event, and a simplified version of the MP3 player is complete.

PyQt5 implements MP3 players
PyQt5 implements MP3 players

The main functions are as follows:

1. Click to listen to shuffle any music on the network shuffle. The played music is automatically downloaded to the MP3 directory below.

2. You can search by the name of the music or the name of the singer, crawl the corresponding song on the Internet, click play, and the played song will be automatically downloaded to the MP3 directory.

3. Local music playback, click to load all the music in the MP3 directory for playback.

The specific code has been put on the bread, interested partners can take a look.

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

Limited-time benefits: Click to follow the private message, you can receive the packaged exe file and use it directly.