Python 0基础小白,按照步骤就能做的播放器 ! ! !(一)

目录

一 安装插件  Pyqt5  PyQt5- tools   PyQt5designer

二 需求分析

1.选中本地的播放文件进行音频播放——点击播放按钮能够找到本地的音频文件

2.更改播放模式(顺序播放:单曲循环)

3.更改当前播放的时长

三 播放器之窗口设计

四 播放器之窗口加载

五 播放器之初始化窗体属性

1定义播放器列表对象QMediaPlaylist

2定义播放器对象QMediaPlayer

3定义列表对象(保存所有播放文件名称)

4初始化按钮的提示信息

六 功能—选本地的播放文件进行音频播放

自定义播放函数musicPlay

七 功能二更改当前播放的时长

 自定义函数getTotalTime

播放器播放持续时长改变(durationChanged信号)调用自定义函数getTotalTime

自定义函数getCurrentTime

播放器当前播放时长改变positionChanged信号)调用自定义函数getCurrentTime

 时长进度条拖拽移动(sliderMoved信号)调用自定义函数timeChanged

八 功能三更改播放模式

 自定义函数modeChanged

否则(单曲循环模式)

模式按钮单击(clicked信号)调用自定义函数modeChanged

九 全程代码


一 安装插件  Pyqt5  PyQt5- tools   PyQt5designer

打开Python属性栏的file,选择setting位置,然后选择图片对应的选项

点开右下角Manage Repsditories  

进行网址添加https://mirrors.aliyun.com/pypi/simple/

搜索需要安装的Pyqt5  PyQt5- tools   PyQt5designer三个插件

 点击左下角进行安装

 安装完成后下方会有绿色的提示信息

最后返回Setting—Python interpreter界面查看插件是否安装成功 

接下来安装扩展工具,从项目中找到Lib--site--packagesQtDesigner,依次按找下图点击,复制其绝对路径  

  复制之后,要将其加入到扩展工具中,如下图

将复制的绝对路径复制到Program中,然后其他设置按照如图所示设置  

 重复上步操作这回选择项目中Python.exe并且复制其绝对路径

二 需求分析

1.选中本地的播放文件进行音频播放——点击播放按钮能够找到本地的音频文件

2.更改播放模式(顺序播放:单曲循环)

3.更改当前播放的时长

三 播放器之窗口设计

先在本项目建立一个images目录存放照片(播放器的桌面图片需要时ico格式,其他需要图片PNG格式即可)

 打开项目中的设计窗口的插件进行设计

 在Qt Designer中进行设计

设计好了之后就可以保存下来,然后在pycharm的左侧栏中找到你保存的设计窗体,右击找到externaltool点击pyuic,然后便可以双击打开后缀为.py的文件。

四 播放器之窗口加载


if __name__ == '__main__':
    #创建应用程序对象
    app=QApplication(sys.argv)
    #创建主窗体对象
    MainWindow=QMainWindow()
    #创建我们自定义的窗体对象
    ui=Ui_MainWindow()
    #设置自定义窗体对象为主窗体
    ui.setupUi(MainWindow)
    #显示主窗体
    MainWindow.show()
    #应用程序退出
    sys.exit(app.exec_())

五 播放器之初始化窗体属性

1定义播放器列表对象QMediaPlaylist

2定义播放器对象QMediaPlayer

3定义列表对象(保存所有播放文件名称)

4初始化按钮的提示信息

  # 自定义窗体初始化属性的函数
    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_btn.setToolTip("播放")
        self.mode_btn.setToolTip("顺序播放")
        # 给播放按钮的单击信号(clicke)调用函数musicPlay
        self.play_btn.clicked.connect(self.musicPlay)
        #给播放器的播放音频持续时长改变信号(durationChang)调用getTotalTime
        self.player.durationChanged.connect(self.getTotalTime)
        #给播放器的当前播放位置更改信号(positionChanged)调用getCurrentTime
        self.player.positionChanged.connect(self.getCurrentTime)
        #给时间进度条的拖拽移动(sliderMoved)调用自主定义函数timeChanfed
        self.time_slider.sliderMoved.connect(self.timeChanged)
    

六 功能—选本地的播放文件进行音频播放

自定义播放函数musicPlay

A.判断播放器是否播放状态

B.判断播放器是否暂停状态

C.否则(停止状态)

  # 自定义播放函数
    def musicPlay(self):
        # 判断播放器是否是播放状态
        if self.player.state() == QMediaPlayer.State.PlayingState:
            #更改播放器为暂停状态
            self.player.pause()
            #更改播放按钮的图片为暂停图片
            self.play_btn.setIcon(QIcon("images/1.ico"))
            #更改播放按钮的提示信息为“播放”
            self.play_btn.setToolTip("播放")

        # 判断播放器是否是暂停状态
        elif self.player.state()==QMediaPlayer.State.PausedState:
            #更改播放器为播放状态
            self.player.play()
            #更改播放按钮的图片为播放图片
            self.play_btn.setIcon(QIcon("images/2.ico"))
            #更改播放按钮的提示信息为“暂停”
            self.play_btn.setToolTip("暂停")
        # 否则(停止状态)
        else:
            # 获取本地音频文件
            fileNames, typeName = QFileDialog.getOpenFileNames(None, "选择音乐", '', "*")
            # 循环音频文件的列表
            for i in fileNames:
                # 把音频文件加载到播放列表对象中
                self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(i)))
                #获取音频文件路径最后一个“/"字符的位置
                start=i.rfind('/')
                end=i.rfind('.')
                #获取音频文件中文件名称,追加到列表对象中
                self.musicNames.append(i[start+1:end])
            # 设置当前播放列表的播放音频索引
            self.playList.setCurrentIndex(0)
            # 开始播放
            self.player.play()
            #更改播放按钮的图片为暂停图片
            self.play_btn.setIcon(QIcon("images/2.ico"))
            #更改播放按钮的提示信息为“暂停”
            self.play_btn.setToolTip("暂停")
            #设置窗体标题显示当前播放名称
            MainWindow.setWindowTitle(f"我的音乐酷--{self.musicNames[0]}")

七 功能二更改当前播放的时长

 自定义函数getTotalTime

播放器播放持续时长改变(durationChanged信号)调用自定义函数getTotalTime

自定义函数getCurrentTime

播放器当前播放时长改变positionChanged信号)调用自定义函数getCurrentTime

 时长进度条拖拽移动(sliderMoved信号)调用自定义函数timeChanged



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

     #自定义函数,获取播放音频的当前时长,参数p保存的是音频当前时长(毫秒)
    def getCurrentTime(self,p):
        #设置时长进度条的当前进度
        self.time_slider.setValue(p)
        #获取时长的秒
        seconds=int(p/1000)
        #获取时长的分钟
        minutes=int(seconds/60)
        seconds=seconds--minutes*60
        str_time = ""
        if minutes<10:
            str_time = str_time + "0"+str(minutes)
        else:
            str_time=str_time+str(minutes)
        str_time = str_time + ":"
        if seconds < 10:
            str_time = str_time + "0" + str(seconds)
        else:
            str_time = str_time+str(seconds)

        #把分钟和秒设置在时间标签中显示
        self.time_lbl.setText(f"{str_time }")

    #自定义函数,更改当前播放位置
    def timeChanged(self,t):
        #设置播放器的当前位置为进度条的当前进度
        self.player.setPosition(t)

八 功能三更改播放模式

 自定义函数modeChanged

否则(单曲循环模式)

  #自定义函数,更改播放模式

    def modeChanged(self):
        # 判断播放列表的播放模式是否是顺序播放
        if self.playList.playbackMode() == QMediaPlaylist.Loop:
            # 1)更改播放列表当前播放模式为单曲循环
            self.playList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
            # 2)更改模式按钮的图片为单曲循环图片
            self.mode_btn.setIcon(QIcon("images/3.ico"))
            # 3)更改模式按钮提示信息
            self.mode_btn.setToolTip("单曲循环")
            # 否则单曲循环
        else:
            # 1)更改播放列表当前播放模式为顺序播放
            self.playList.setPlaybackMode(QMediaPlaylist.Loop)
            # 2)更改模式按钮的图片为顺序图片
            self.mode_btn.setIcon(QIcon("images/4.ico"))
            # 3)更改模式按钮提示信息
            self.mode_btn.setToolTip("顺序播放")

模式按钮单击(clicked信号)调用自定义函数modeChanged

在前边自主定义窗体初始化属性的函数部分添加(点击播放按钮(clicked信号)调用函数musicPlay)

九 全程代码

本人是Python小白发现本人思路有问题的请指出,做完这个小项目请示最考验的是对整体的理解,知道自己要做什么然后怎么取用代码去实现的你的想法。其中也运用到了面向对象的知识所以主要是先屡思路,技术可以慢慢来学.期望大家一起进步

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'myMusics.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.
import sys

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


def fileNames(args):
    pass


class QMeduaContent(object):
    pass


def fromLocalFile(i):
    pass


class MainWindow(object):
    pass


class MainWindow(object):
    pass


class Ui_MainWindow(object):


    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(690, 148)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("images/7.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.play_btn = QtWidgets.QPushButton(self.centralwidget)
        self.play_btn.setEnabled(True)
        self.play_btn.setGeometry(QtCore.QRect(0, -10, 181, 161))
        font = QtGui.QFont()
        font.setFamily("仿宋")
        self.play_btn.setFont(font)
        self.play_btn.setMouseTracking(False)
        self.play_btn.setTabletTracking(False)
        self.play_btn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images/1.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.play_btn.setIcon(icon1)
        self.play_btn.setIconSize(QtCore.QSize(130, 130))
        self.play_btn.setObjectName("play_btn")
        self.mode_btn = QtWidgets.QPushButton(self.centralwidget)
        self.mode_btn.setGeometry(QtCore.QRect(500, -10, 191, 161))
        font = QtGui.QFont()
        font.setFamily("仿宋")
        self.mode_btn.setFont(font)
        self.mode_btn.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("images/4.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.mode_btn.setIcon(icon2)
        self.mode_btn.setIconSize(QtCore.QSize(130, 130))
        self.mode_btn.setObjectName("mode_btn")
        self.time_slider = QtWidgets.QSlider(self.centralwidget)
        self.time_slider.setGeometry(QtCore.QRect(240, 60, 211, 20))
        self.time_slider.setOrientation(QtCore.Qt.Horizontal)
        self.time_slider.setObjectName("time_slider")
        self.time_lbl = QtWidgets.QLabel(self.centralwidget)
        self.time_lbl.setGeometry(QtCore.QRect(330, 90, 41, 16))
        font = QtGui.QFont()
        font.setFamily("仿宋")
        self.time_lbl.setFont(font)
        self.time_lbl.setObjectName("time_lbl")
        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.time_lbl.setText(_translate("MainWindow", "00:00"))

    # 自定义窗体初始化属性的函数
    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_btn.setToolTip("播放")
        self.mode_btn.setToolTip("顺序播放")
        # 给播放按钮的单击信号(clicke)调用函数musicPlay
        self.play_btn.clicked.connect(self.musicPlay)
        #给播放器的播放音频持续时长改变信号(durationChang)调用getTotalTime
        self.player.durationChanged.connect(self.getTotalTime)
        #给播放器的当前播放位置更改信号(positionChanged)调用getCurrentTime
        self.player.positionChanged.connect(self.getCurrentTime)
        #给时间进度条的拖拽移动(sliderMoved)调用自主定义函数timeChanfed
        self.time_slider.sliderMoved.connect(self.timeChanged)
        #给模式按钮点击(clicked信号)调用自定义函数modeChanged
        self.mode_btn.clicked.connect(self.modeChanged)

    #自定义函数,更改播放模式

    def modeChanged(self):
        # 判断播放列表的播放模式是否是顺序播放
        if self.playList.playbackMode() == QMediaPlaylist.Loop:
            # 1)更改播放列表当前播放模式为单曲循环
            self.playList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
            # 2)更改模式按钮的图片为单曲循环图片
            self.mode_btn.setIcon(QIcon("images/3.ico"))
            # 3)更改模式按钮提示信息
            self.mode_btn.setToolTip("单曲循环")
            # 否则单曲循环
        else:
            # 1)更改播放列表当前播放模式为顺序播放
            self.playList.setPlaybackMode(QMediaPlaylist.Loop)
            # 2)更改模式按钮的图片为顺序图片
            self.mode_btn.setIcon(QIcon("images/4.ico"))
            # 3)更改模式按钮提示信息
            self.mode_btn.setToolTip("顺序播放")




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

     #自定义函数,获取播放音频的当前时长,参数p保存的是音频当前时长(毫秒)
    def getCurrentTime(self,p):
        #设置时长进度条的当前进度
        self.time_slider.setValue(p)
        #获取时长的秒
        seconds=int(p/1000)
        #获取时长的分钟
        minutes=int(seconds/60)
        seconds=seconds--minutes*60
        str_time = ""
        if minutes<10:
            str_time = str_time + "0"+str(minutes)
        else:
            str_time=str_time+str(minutes)
        str_time = str_time + ":"
        if seconds < 10:
            str_time = str_time + "0" + str(seconds)
        else:
            str_time = str_time+str(seconds)

        #把分钟和秒设置在时间标签中显示
        self.time_lbl.setText(f"{str_time }")

    #自定义函数,更改当前播放位置
    def timeChanged(self,t):
        #设置播放器的当前位置为进度条的当前进度
        self.player.setPosition(t)

    # 自定义播放函数
    def musicPlay(self):
        # 判断播放器是否是播放状态
        if self.player.state() == QMediaPlayer.State.PlayingState:
            #更改播放器为暂停状态
            self.player.pause()
            #更改播放按钮的图片为暂停图片
            self.play_btn.setIcon(QIcon("images/1.ico"))
            #更改播放按钮的提示信息为“播放”
            self.play_btn.setToolTip("播放")

        # 判断播放器是否是暂停状态
        elif self.player.state()==QMediaPlayer.State.PausedState:
            #更改播放器为播放状态
            self.player.play()
            #更改播放按钮的图片为播放图片
            self.play_btn.setIcon(QIcon("images/2.ico"))
            #更改播放按钮的提示信息为“暂停”
            self.play_btn.setToolTip("暂停")
        # 否则(停止状态)
        else:
            # 获取本地音频文件
            fileNames, typeName = QFileDialog.getOpenFileNames(None, "选择音乐", '', "*")
            # 循环音频文件的列表
            for i in fileNames:
                # 把音频文件加载到播放列表对象中
                self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(i)))
                #获取音频文件路径最后一个“/"字符的位置
                start=i.rfind('/')
                end=i.rfind('.')
                #获取音频文件中文件名称,追加到列表对象中
                self.musicNames.append(i[start+1:end])
            # 设置当前播放列表的播放音频索引
            self.playList.setCurrentIndex(0)
            # 开始播放
            self.player.play()
            #更改播放按钮的图片为暂停图片
            self.play_btn.setIcon(QIcon("images/2.ico"))
            #更改播放按钮的提示信息为“暂停”
            self.play_btn.setToolTip("暂停")
            #设置窗体标题显示当前播放名称
            MainWindow.setWindowTitle(f"我的音乐酷--{self.musicNames[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_())
  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面是从0到搭建完成的详细步骤教程: 1. 安装Python环境和必要的库 首先,你需要安装Python环境。建议安装Python3.6以上版本。然后安装以下必要的库: ```bash pip install torch transformers flask flask-cors ``` 2. 下载预训练模型 你可以从Hugging Face官网下载预训练的GPT模型(如:GPT-2)。下载后解压到某个目录下。 3. 编写模型代码 在Python中使用PyTorch加载模型,代码如下: ```python import torch from transformers import GPT2Tokenizer, GPT2Model # 加载预训练模型 tokenizer = GPT2Tokenizer.from_pretrained('gpt2-medium') model = GPT2Model.from_pretrained('gpt2-medium') # 设置模型为评估模式 model.eval() # 输入文本转换成模型的输入张量 input_ids = tokenizer.encode("Your text here", return_tensors='pt') # 使用模型进行预测 with torch.no_grad(): outputs = model(input_ids) # 提取预测结果 predictions = outputs[0] ``` 在以上代码中,`GPT2Tokenizer`和`GPT2Model`是Hugging Face提供的GPT模型相关工具,`from_pretrained`方法用于从预训练模型中加载相关参数。 `model.eval()`表示设置模型为评估模式,`tokenizer.encode`用于将输入文本转换成模型的输入张量,`model`对象的`__call__`方法用于使用模型进行预测。最后,我们从预测结果中提取出模型的输出。 4. 编写API服务 使用Flask和Flask-Cors编写API服务,代码如下: ```python from flask import Flask, request, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app) tokenizer = GPT2Tokenizer.from_pretrained('gpt2-medium') model = GPT2Model.from_pretrained('gpt2-medium') model.eval() @app.route('/api/gpt2', methods=['POST']) def generate_text(): data = request.json input_text = data['text'] length = int(data.get('length', 100)) temperature = float(data.get('temperature', 1.0)) top_k = int(data.get('top_k', 0)) input_ids = tokenizer.encode(input_text, return_tensors='pt') output = model.generate( input_ids=input_ids, max_length=length, temperature=temperature, top_k=top_k ) output_text = tokenizer.decode(output[0], skip_special_tokens=True) return jsonify({'text': output_text}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True) ``` 在以上代码中,我们使用Flask和Flask-Cors编写了API服务。其中`generate_text`方法用于生成文本,接受POST请求,参数包括输入文本、生成文本的长度、温度和top-k值等。该方法中,我们使用预训练模型生成文本,并将生成的文本返回给客户端。 5. 启动API服务 使用以下命令启动API服务: ```bash python app.py ``` 至此,你就成功搭建了一个基于GPT模型的AI对话系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值