[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import sys
# Form implementation generated from reading ui file '小宇播放器.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QIcon
from PyQt5.QtMultimedia import QMediaPlaylist, QMediaPlayer, QMediaContent
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 175)
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(16)
MainWindow.setFont(font)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("image/微信图片_20221122103236.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.start_btn = QtWidgets.QPushButton(self.centralwidget)
self.start_btn.setGeometry(QtCore.QRect(0, 50, 81, 71))
font = QtGui.QFont()
font.setFamily("华文行楷")
font.setPointSize(16)
self.start_btn.setFont(font)
self.start_btn.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("image/63061b052813d74c1638945409.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.start_btn.setIcon(icon1)
self.start_btn.setIconSize(QtCore.QSize(70, 70))
self.start_btn.setAutoDefault(False)
self.start_btn.setObjectName("start_btn")
self.mode_btn = QtWidgets.QPushButton(self.centralwidget)
self.mode_btn.setGeometry(QtCore.QRect(710, 40, 91, 91))
self.mode_btn.setText("")
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap("image/image2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.mode_btn.setIcon(icon2)
self.mode_btn.setIconSize(QtCore.QSize(70, 70))
self.mode_btn.setObjectName("mode_btn")
self.time_Slider = QtWidgets.QSlider(self.centralwidget)
self.time_Slider.setGeometry(QtCore.QRect(140, 70, 441, 31))
self.time_Slider.setOrientation(QtCore.Qt.Horizontal)
self.time_Slider.setObjectName("time_Slider")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(600, 40, 101, 91))
self.label.setTextFormat(QtCore.Qt.AutoText)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# 调用自定义窗体初始化函数
self.myWindowInit()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "小宇音乐播放器"))
self.label.setText(_translate("MainWindow", "00:00"))
# 自定义窗体属性函数
def myWindowInit(self):
# 创建播放列表对象(窗体属性)
self.playlist = QMediaPlaylist()
# 初始化播放列表对象的播放模式(顺序播放)
self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
# 创建播放器对象(窗体属性)
self.player = QMediaPlayer()
# 初始化播放器的播放音量最大
self.player.setVolume(100)
# 设置播放器的播放列表
self.player.setPlaylist(self.playlist)
# 创建列表对象(窗体属性)
self.musicname = []
# 设置按钮的提示信息
self.mode_btn.setToolTip("顺序播放")
# 给播放按钮的点击信号(clicked)调用函数musicplay
self.start_btn.clicked.connect(self.musicplay)
# 给播放器的播放音频持续时长改变信号(durationChanged)调用getTotalTime
self.player.durationChanged.connect(self.getTotalTime)
# 给播放器的当前播放位置更改信号调用getcurrentTime函数
self.player.positionChanged.connect(self.getcurrentTime)
# 给时间进度条的拖拽移动(sliderMoved)调用自定义函数
self.time_Slider.sliderMoved.connect(self.timeChanged)
# 给模式按钮点击(clicked)信号调用自定义函数
self.mode_btn.clicked.connect(self.modeChanged)
# 自定义函数getTotalTime,获取播放音频的总时长,参数d保存的是音频的总时长(毫秒)
def getTotalTime(self, d):
# 设置时间进度条的进度之和正在播放的音频总时长一致
self.time_Slider.setRange(0, d)
# 获取当前播放列表对象播放音频的索引
index = self.playlist.currentIndex()
# 设置窗体标题显示音频名称
MainWindow.setWindowTitle(f"小宇播放器--{self.musicname[index]}")
# 自定义函数,获取播放音频的当前时长,参数p保存当前时长
def getcurrentTime(self, p):
# 设置时长进度条的当前进度和当前播放时长一致
self.time_Slider.setValue(p)
# 获取时长的秒
seconds = int(p / 1000)
# 获取分钟
minutes = int(seconds / 60)
seconds = seconds - minutes * 60
# 把分钟和秒设置在时间标签中显示
self.label.setText(f"{minutes}:{seconds}")
# 自定义函数,更改当前播放位置
def timeChanged(self, t):
# 设置播放器的当前位置为进度条的当前进度t
self.player.setPosition(t)
# 自定义函数切换播放模式
def modeChanged(self):
# 判断播放列表的播放模式是否顺序播放
if self.playlist.playbackMode() == QMediaPlaylist.Loop:
# 更改播放列表当前播放模式为单曲循环
self.playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
# 更改模式按钮的图片为单曲循环的图片
self.mode_btn.setIcon(QIcon("image/image1.png"))
# 更改模式按钮提示信息
else:
# 更改播放列表当前播放模式为单曲循环
self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
# 更改模式按钮的图片为单曲循环图片
self.mode_btn.setIcon(QIcon("image/image2.png"))
# 更改提示信息
self.mode_btn.setToolTip("顺序播放 ")
# 自定义播放函数
def musicplay(self):
# 判断播放器是否播放状态
if self.player.state() == QMediaPlayer.State.PlayingState:
# 更改播放器为暂停状态
self.player.pause()
# 更改图片
self.start_btn.setIcon(QIcon("image/63061b052813d74c1638945409.png"))
# 更改提示信息
self.start_btn.setToolTip("播放")
elif self.player.state() == QMediaPlayer.State.PausedState:
# 更改播放器为播放状态
self.player.play()
# 更改图片
self.start_btn.setIcon(QIcon("image/641619df14ff3aa71637740879.png"))
# 更改提示信息
self.start_btn.setToolTip("暂停")
# 否则(暂停状态)
else:
# 获取本地音频文件
fileNames, typename = QFileDialog.getOpenFileNames(None, "选择音乐", '', '*')
print(fileNames, typename)
# 循环音频文件的列表
for i in fileNames:
# 把音频文件加载到播放列表对象中
self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(i)))
print(i)
# 获取音频文件路径最后一个“/”字符的位置
start = i.rfind('/')
# 获取音频文件路径最后“字符的位置”
end = i.rfind('.')
# 获取音频文件中文件名称,追加到列表对象
self.musicname.append(i[start + 1:end])
# 设置当前播放列表的播放音频索引
self.playlist.setCurrentIndex(0)
# 开始播放
self.player.play()
# 更改播放按钮的图片为暂停图片
self.start_btn.setIcon(QIcon("image/641619df14ff3aa71637740879.png"))
# 更改播放按钮的提示信息为暂停
self.start_btn.setToolTip("暂停")
# 设置窗体标题显示当前播放音频名称
MainWindow.setWindowTitle(f"小宇音乐库--{self.musicname[0]}")
# 程序入口
if __name__ == "__main__":
# 创建程序对象
app = QApplication(sys.argv)
# 创建主窗体对象
MainWindow = QMainWindow()
# 创建自定义窗体对象
ui = Ui_MainWindow()
# 设置自定义窗体对象设置为主窗体
ui.setupUi(MainWindow)
# 设置窗体大小不可更改
MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
# 显示主窗体
MainWindow.show()
# 应用程序退出
sys.exit(app.exec_())