【python】本地音乐播放器(PyQt5界面版)

大家好,近期又学习了新内容,所以迫不及待想分享出来。

关于python Gui编写的界面版的音乐播放器,能实现本地音乐的播放。

目录

前期准备

设计界面

功能需求

播放、暂停

播放模式

时长显示

主窗体

打包成可执行文件

成果展示

完整代码与文件


前期准备

  • 1.1 新建一个新项目MyPlayer
  • 1.2 安装PyQt5设计器
  • 1.3 配置拓展工具 PyQt5、PyQt5Designer、PyQt5-tools
  • 1.4 需求分析 (播放、暂停、显示正在播放的歌曲名、切换播放模式、滚动条拖动音乐进度、播放进度与时长)

设计界面

打开PyQt5工具

【python】本地音乐播放器(PyQt5界面版)_第1张图片

【python】本地音乐播放器(PyQt5界面版)_第2张图片

选择右边的控件,直接拖动设计就行,然后右边有一些控件属性可以自行设计。

功能需求

播放、暂停

    def musicPlay(self):
        # 判断是否是播放状态
        if self.player.state() == QMediaPlayer.State.PlayingState:
            # 更改播放器为暂停状态
            self.player.pause()
            # 更改播放按钮的图片为暂停图片
            self.play_bin.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\暂停.png'))
            # 设置提示信息为暂停
            self.play_bin.setToolTip('暂停')
            # 判断是否是暂停状态
        elif self.player.state() == QMediaPlayer.State.PausedState:
            # 更改播放器为播放状态
            self.player.play()
            # 更改播放按钮为播放图片
            self.play_bin.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\播放.png'))
            # 设置提示信息为播放
            self.play_bin.setToolTip('播放')
        # 否则(停止)
        else:
            # 获取本地音频文件
            fileNames, typeName = QFileDialog.getOpenFileNames(None, '选择文件', '', '*')
            print(fileNames)
            for i in fileNames:
                # 把音频加载到播放列表对象中
                self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(i)))
                print(i)
                # 获取音频文件路径最后一个’/‘字符的位置
                start = i.rfind('/')
                # 获取音频文件路径最后’.‘字符位置
                end = i.rfind('.')
                # 获取音频文件中文件名称,追加到列表对象中
                self.musicNames.append(i[start + 1:end])
                print(self.musicNames)

            # 设置当前播放列表的播放音频索引
            self.playList.setCurrentIndex(0)
            # 开始播放
            self.player.play()
            # 更改播放按钮的图片为暂停图片
            self.play_bin.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\暂停.png'))
            # 设置提示信息为暂停
            self.play_bin.setToolTip('暂停')
            # 设置窗体标题显示当前播放音频名称
            MainWindow.setWindowTitle(f'彩虹音乐----{self.musicNames[0]}')

播放模式

列表、单循环模式。

 # 自定义函数更改播放模式
    def modeChanged(self):
        # 判断播放列表的播放模式是否顺序播放
        if self.playList.playbackMode()==QMediaPlaylist.Loop:
            # 更改播放列表当前播放模式为单曲循环
            self.playList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
            # 更改按钮的图片为单曲循环
            self.pushButton.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\循环.png'))
            # 更改播放模式按钮的提示信息
            self.pushButton.setToolTip('单曲循环')

        # 否则(单曲循环)
        else:
            # 更改播放列表当前播放模式为列表
            self.playList.setPlaybackMode(QMediaPlaylist.Loop)
            # 更改按钮的图片为列表
            self.pushButton.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\列表.png'))
            # 更改播放模式按钮的提示信息
            self.pushButton.setToolTip('顺序播放')

时长显示

这里边代码比较简单,就写在一起了,功能包括拖动方框实现歌曲快进,标题框显示正在播放的歌曲名称,标签显示播放时长。

# 自定义函数,获取播放音频的总时长,参数d保存的音频的总时长(毫秒)
    def getTotalTime(self, d):
        # 设置时间进度条的进度值和正在播放的音频总时长一致
        self.horizontalSlider.setRange(0,d)
        # 获取当前播放列表对象中播放音频的索引
        index = self.playList.currentIndex()
        # 设置窗体标题显示播放音频名称
        MainWindow.setWindowTitle(f'彩虹音乐----{self.musicNames[index]}')

    # 自定义函数,获取播放音频的当前时长,参数p保存的音频的当前时长(毫秒)
    def getCurrentTime(self,p):
        #设置市场进度条当前的进度
        self.horizontalSlider.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 myWindowInit(self):
        # 创建播放列表属性
        self.playList = QMediaPlaylist()
        # 初始化播放列表对象的播放模式Loop(顺序播放)
        self.playList.setPlaybackMode(QMediaPlaylist.Loop)
        # 创建播放器对象(窗体属性)
        self.player = QMediaPlayer()
        # 初始化播放器的播放音量最大
        self.player.setVolume(100)
        # 设置播放器的播放列表
        self.player.setPlaylist(self.playList)
        # 创建列表对象(窗体属性)
        self.musicNames = []
        # 设置按钮初始化提示信息
        self.play_bin.setToolTip('播放')
        self.pushButton.setToolTip('顺序播放')
        # 给播放按钮单击信号(clicke)调用函数musicPlay
        self.play_bin.clicked.connect(self.musicPlay)
        # 给播放器的播放音频持续时长改变信号(durationChanged)调用getTotalTime
        self.player.durationChanged.connect(self.getTotalTime)
        # 给播放器的当前位置更改播放信号(positionChanged)调用getCurrentTime
        self.player.positionChanged.connect(self.getCurrentTime)
        # 给进度条的拖拽移动(sliderMoved)调用自定义函数timeChanged
        self.horizontalSlider.sliderMoved.connect(self.timeChanged)
        # 模式按钮单击信号(clicked)调用自定义函数modeChanged
        self.pushButton.clicked.connect(self.modeChanged)

打包成可执行文件

我最后是打包成了有正式安装步骤的应用软件,可以不用PyCharm 环境启动。

如果需要打包教程,我会详细出一期的,本站大佬写的打包教程和我自己的简单方法都不一样,感觉有些复杂。

【python】本地音乐播放器(PyQt5界面版)_第3张图片

成果展示

【python】本地音乐播放器(PyQt5界面版)_第4张图片

可以载入本地音频播放

完整代码与文件

如果需要完整版代码,不要忘记点赞收藏评论哦!

往期文章分享

【python】人机猜拳游戏(条件嵌套方法)

【python】GIF动图格式转化为Png格式

【python】高阶函数的举例(map、reduce、filter函数和lambda表达式)

【python】关于40个常见方法的举例~便与更好的理解python当中的常用方法

【python】学生信息管理系统

本文仅供参考学习交流,感谢大家的支持~

你可能感兴趣的:(大数据,python,qt)