PyQt5實現(xiàn)簡易音樂播放器
- 環(huán)境
- vscode
- python 3.10.0
- PyQt5 5.15.4
- 功能目標
能夠讀取本地的音樂文件,并實現(xiàn)播放的開關、曲目的切換和音量的加減
- 具體實現(xiàn)
- 新建一個文件夾,在文件夾下再新建一個文件夾,命名為music,將歌曲放入其中。在vscode中打開該文件夾。
- 在QtDesigner中搭建出UI界面,并使用pyuic工具轉換為py文件
- 新建main.py文件,用于界面的顯示
- 新建一個文件夾,在文件夾下再新建一個文件夾,命名為music,將歌曲放入其中。在vscode中打開該文件夾。
import 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_())
4. 通過os.listdir()函數(shù)完成歌曲文件的讀取
... # 省略之前出現(xiàn)的內(nèi)容,后面的...同理
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)
# 獲取歌曲總數(shù)
self.music_all_num = len(self.music_list)
5. 新建 QMediaPlayer對象,并完成音量的設置
...
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()
# 當前播放狀態(tài)標志位,F(xiàn)alse表示當前處于暫停狀態(tài),True表示當前處于播放狀態(tài)
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])))
6. 歌曲名字的展示
...
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):
# 根據(jù)當前歌曲位置索引獲取歌曲名
self.label.setText(self.music_list[self.music_index])
效果圖文章來源:http://www.zghlxwxcb.cn/news/detail-537096.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-537096.html
7. 播放按鈕綁定函數(shù),t實現(xiàn)歌曲播放狀態(tài)的切換
...
class MainWin(QMainWindow, Ui_Dialog):
def __init__(self, parent=None):
super(MainWin, self).__init__(parent)
self.setupUi(self)
...
# 播放按鈕綁定函數(shù)
self.pushButton.clicked.connect(self.player_state_change)
def player_state_change(self):
# 通過self.player_state獲取當前播放狀態(tài),再進行切換
if self.player_state:
# 停止播放
self.player.stop()
# 播放狀態(tài)標志設置為False
self.player_state = False
else:
# 播放當前音頻
self.player.play()
# 播放狀態(tài)標志設置為True
self.player_state = True
8. 歌曲上下切換按鈕綁定函數(shù),實現(xiàn)歌曲的切換
...
class MainWin(QMainWindow, Ui_Dialog):
def __init__(self, parent=None):
super(MainWin, self).__init__(parent)
self.setupUi(self)
...
# 下一首按鈕點擊事件綁定函數(shù)
self.pushButton_2.clicked.connect(self.next_music)
# 上一首按鈕點擊事件綁定函數(shù)
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
# 根據(jù)位置索引獲取歌曲名,并和歌曲存放目錄拼接獲取文件
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
# 根據(jù)位置索引獲取歌曲名,并和歌曲存放目錄拼接獲取文件
self.player.setMedia(QMediaContent(QUrl.fromLocalFile(self.mp3filedir + self.music_list[self.music_index])))
# 歌曲名展示更新
self.music_detail()
# 進行播放
self.player.play()
9. 音量的增減,直接修改音量設定值再執(zhí)行次音量設定函數(shù)即可
...
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)
- 主函數(shù)代碼匯總
import 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()
# 當前播放狀態(tài)標志位,F(xiàn)alse表示當前處于暫停狀態(tài),True表示當前處于播放狀態(tài)
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)
# 獲取歌曲總數(shù)
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)
# 播放按鈕綁定函數(shù)
self.pushButton.clicked.connect(self.player_state_change)
# 下一首按鈕綁定函數(shù)
self.pushButton_2.clicked.connect(self.next_music)
# 上一首按鈕綁定函數(shù)
self.pushButton_3.clicked.connect(self.previous_music)
# 音量加按鈕綁定函數(shù)
self.pushButton_4.clicked.connect(self.voice_add)
# 音量減按鈕綁定函數(shù)
self.pushButton_5.clicked.connect(self.voice_reduce)
def player_state_change(self):
# 通過self.player_state獲取當前播放狀態(tài),再進行切換
if self.player_state:
# 停止播放
self.player.stop()
# 播放狀態(tài)標志設置為False
self.player_state = False
else:
# 播放當前音頻
self.player.play()
# 播放狀態(tài)標志設置為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
# 根據(jù)位置索引獲取歌曲名,并和歌曲存放目錄拼接獲取文件
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
# 根據(jù)位置索引獲取歌曲名,并和歌曲存放目錄拼接獲取文件
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_())
- 布局文件
# -*- 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實現(xiàn)簡易音樂播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!