吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1631|回复: 38
收起左侧

[学习记录] 用Python编写的简单而强大的音乐播放器

  [复制链接]
kkkkkkkkn 发表于 2023-7-30 15:37
刚入门轻点喷
[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.QtMultimedia import QMediaPlaylist, QMediaPlayer
from PyQt5.QtWidgets import QApplication, QMainWindow


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/R-C.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)
    # 自定义播放函数
    def musicplay(self):
        # 判断播放器是否播放状态
        if self.player.state() == QMediaPlayer.State.PlayingState:
            print("播放状态")
        # 判断播放器是否暂停状态
        elif self.player.state() == QMediaPlayer.State.PausedState:
            print("暂停状态")
        # 否则(暂停状态)
        else:
            print("停止状态")
# 程序入口
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_())

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
q56020676 + 1 鼓励转贴优秀软件安全工具和文档!
NF123 + 1 + 1 可以
52bojie + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pixiaopi 发表于 2023-7-30 18:46
这是一个使用Python和PyQt5编写的音乐播放器的界面设计和部分功能实现的代码。下面是对此代码的主要功能概括:

1. 在这个代码中,首先通过import语句导入必要的模块。所需要的库或模块包括`sys`,表示Python的系统模块;`QtCore`,`QtGui`和`QtWidgets`,这些模块都是PyQt5库中的模块,用于创建和控制GUI应用程序;以及`QMediaPlaylist`和`QMediaPlayer`,这两个都是Qt多媒体模块中的一部分,用于媒体播放功能。

2. 定义一个类`Ui_MainWindow`,这个类定义了音乐播放器的UI界面和部分行为。在`setupUi`方法中,设置窗口大小、字体、标题、图标等。

3. `setupUi`方法中,定义了很多组件,例如两个按钮(`start_btn`和`mode_btn`),一个滑块(`time_Slider`)和一个标签(`label`)等。这些都是提供应用程序的界面和交互的组件。

4. 在`retranslateUi`方法中,使用`QCoreApplocation.translate`方法将字符串翻译成其他语言,这里窗口标题被设置为"小宇音乐播放器",标签设置为"00:00"。

5. `myWindowInit`方法则设置了一些音乐播放器的动作,例如初始化播放列表、播放模式、音量、播放信号与播放函数的连接等。

6. 在`musicplay`方法中,实现了对播放状态的监控,这里只是暂时打印出不同的播放状态,并未真正实现具体的播放、暂停或停止等操作。

7. 在主执行模块`if __name__ == "__main__"`中,首先创建应用程序对象,然后创建主窗口对象,显示出窗口,最后启动应用程序事件循环。

总的来说,这是一个简单的音乐播放器界面设计以及部分功能实现的代码,但并未实现全部的播放、暂停、停止等音乐播放的核心功能,还有很多功能需要实现以完成这个播放器。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wsasecy + 1 + 1 辣么热心、必须给你加鸡腿

查看全部评分

 楼主| kkkkkkkkn 发表于 2023-7-30 19:35
这是全部代码   谢谢大佬指正
[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_())
longzhiye 发表于 2023-7-30 16:57
ysjd22 发表于 2023-7-30 17:06
非常好。。谢谢楼主,学习代码
Marinai0128 发表于 2023-7-30 17:20
非常好。。谢谢楼主,学习代码
t5656 发表于 2023-7-30 17:39
这真是个学习的好地方,感谢感谢!
梁茵 发表于 2023-7-30 17:57
楼主你这话说得,简单又强大,强大还能简单吗
鹏霖阳光 发表于 2023-7-30 18:01
非常感谢 真是好东东
loveyao6688 发表于 2023-7-30 18:10
怎么下载?我也搞不懂
wysyz 发表于 2023-7-30 18:38
谢谢楼主,学习代码
corona522 发表于 2023-7-30 18:44
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表