python3GUI--做一款某雷影音播放器By:PyQt5

新版本已发布,支持弹幕请移步:https://blog.csdn.net/a1397852386/article/details/127952142?spm=1001.2014.3001.5502
本次使用PyQt5开发一款视频播放器,支持本地视频文件播放、在线视频播放,支持解析播放B站视频,撰写本篇用来记录一下开发过程。

一.准备工作

本软件是在Windows系统上使用PyQt5开发的视频播放器GUI。
使用时需要安装解码器,这里推荐LAVFilters解码器

LAV Filters是一种使用libavformat播放各种媒体文件的多格式媒体拆分器/解码器。对MKV/WebM、AVI、MP4/MOV、MPEG-TS、FLV、OGG进行测试并注册。其他格式可以使用GraphStudio进行测试。H264/AVC、H265/HEVC、VC-1、MPEG4-ASP(Divx/Xvid)、VP8、VP9已测试,运行良好。DTS,AC3,TrueHD,MP3,Vorbis已经过测试。字幕支持。流切换。

下载地址:

https://github.com/Nevcairiel/LAVFilters/releases

如果访问太慢可以去我的蓝奏云下载:

https://wwe.lanzoul.com/iehNz0167ewb

二.预览

1.主界面

在这里插入图片描述
主界面为软件的启动界面,打开软件后会进入主界面。

2.添加本地视频到播放列表

请添加图片描述
点击右上角按钮,添加本地文件到播放器列表。

3.查看视频信息&播放本地视频

请添加图片描述

鼠标放在视频名称上,可以查看完整视频名称、视频大小以及时时长。双击视频即可开始播放。

4.视频进度、音量调节

请添加图片描述

通过点击、拖动视频进度条、敲击键盘←、→键改变视频播放进度,通过点击、拖动音量调节滑块、敲击键盘↑、↓键或者上下滚动鼠标滚轮上下滚动改变当前播放器的音量。

5.播放在线视频-b站

请添加图片描述

在首页的输入框中输入b站视频地址,播放器自动解析视频,即可实现b站视频播放(暂不支持弹幕)。
测试视频地址:https://www.bilibili.com/video/BV1fi4y1C7qE?spm_id_from=333.337.search-card.all.click

6.播放在线视频-其他

请添加图片描述

在首页的输入框中输入其他视频地址,也能实现在线视频的播放。
测试视频地址:http://vfx.mtime.cn/Video/2019/03/09/mp4/190309153658147087.mp4

7.播放在线电视节目

播放器支持解析.m3u8地址,继而实现在线电视节目播放

m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。
m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度。

请添加图片描述

7.登录窗口

模仿着写了一个登录窗口,没有写具体功能。PS:由于CSDN图片限制,抹去了二维码。
请添加图片描述

请添加图片描述

值得一提的是,若3分钟内不扫描此二维码,会自动提示“二维码已失效,点击刷新”即可展示原二维码。
请添加图片描述

8.文件删除对话框

右击播放列表某一个视频,选择“删除本地文件”。
请添加图片描述

三.UI设计

1.主界面UI:

主界面采用整体垂直布局,局部水平或者垂直布局。存在重写的组件(QVideoWidget、两个QSlider),整体样式设计采用QSS。
在这里插入图片描述

2.登录界面UI:

请添加图片描述

四.程序设计

1.程序执行流程示意图:

程序执行流程示意图如下图所示
请添加图片描述

2.用到的一些类及子类:

类名作用
QMainWindow主窗口
QHeaderView主设置表格表头
QAction执行一些动作
QMenu创建菜单
QSystemTrayIcon托盘
QMediaPlaylist播放列表
QMediaContent添加到播放列表的内容
QMediaPlayer播放器主体
QMessageBox消息提示框
QTimer定时器,控制提示信息
QUrl将url转化为qt识别的url
QMessageBox消息提示框
QDateTime进行时间转换
Qt存储一些QT5常量
pyqtSlot

3.左上角提示信息:

声明一个QLabel,使用QSS设置其样式(背景透明,字体颜色为黄色),设置其父窗口为frame,使用信号与槽机制并且使用QFontMetrics(),动态计算此label宽度,将其以合适的大小展示在适当的位置,在使用定时器QTimer定时销毁此label,实现左上角提示信息的显示。

4.视频播放控制

在视频播放时,用户可以通过键盘改变播放进度,鼠标左键双击控制是否全屏,使用鼠标左键单击控制视频播放与暂停,又或者使用鼠标滚轮控制播放器的音量。我自定义了一个QVideoWidget,通过重写其中的mouseReleaseEvent()方法实现播放与暂停控制,重写mouseDoubleClickEvent()实现左键双击全屏,重写wheelEvent()实现鼠标滚轮控制播放器音量,归根结底还是信号与槽。

5.鼠标点击实现进度控制

原生的QSlider仅仅给我们提供了sliderMoved(),sliderPressed(),sliderReleased()等方法,如果我们想通过点击slider的某一个位置实现视频进度、播放器音量的调节呢?这就需要我们自定义QSlider的mouseReleaseEvent()事件了,通过重写mouseReleaseEvent()函数,判断鼠标松开事件是鼠标左键发出的,继而确定鼠标点击位置,将slider的值设置为鼠标点击位置的值,并且用信号将此值发射给播放器,这就实现了鼠标点击指定位置改变进度/音量。

五.避坑

在此记录下开发过程中的坑

1.添加了QVideoWidget,播放视频只有声音没有画面:

分析:可能设置了主窗口背景透明self.setAttribute(Qt.WA_TranslucentBackground)

2.程序执行出现了:DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (IDispatch error #102)

分析:缺少LAVFilters-0.76-Installer.exe解码器

六.待解决问题

软件只是实现了某雷影音播放器的一点点功能,当然还存在一些问题。
1.播放列表不支持增量添加
2.没有播放历史进度记录
3.在线视频播放地址解析错误会造成软件直接崩溃产生DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c0008 (???)
等等…

七.总结

本次使用PyQt5仿照某雷影音开发了一款视频播放器,支持在线、本地视频播放、b站视频解析播放,播放进度调节、音量调节、全屏、视频截图、信息提示…播放器功能基本实现,其他额外的功能暂未实现。ps:本打算在软件中加入自定义的广告,但是没加。以后还有可能做一款视频播放器,也像b站那种,可以播放弹幕,知易行难,任重而道远。(程序晚几天打包好放链接)觉得还行的话,点个赞吧~
软件试用:蓝奏云
请添加图片描述

附:参考

1.QT指定窗口位置截屏:

Qt实现截屏并保存(转载)

2.事件类:

Qt5的QEvent事件类

3.将本地文件移入回收站(不在磁盘上删除):

Python 组织文件:shutil模块与os,send2trash安全删除模块

4.左上角提示信息文字宽度自动计算:

QFontMetrics 实现文字显示长度控制

5.cv2获取视频时长

OpenCV学习笔记(2):间隔截取视频帧

6.滚轮事件:

8-使用QT5的鼠标事件和滚轮事件

7.点击QSlider跳转到指定进度(或控制音量):

QT应用编程: QSlider设置滚动块定位到鼠标点击的地方

8.小图标的使用

QT 使用 qtasome图标 (python版)

9.QSS渐变颜色:

Qss 渐变颜色设置

10.QSS窗口圆角:

Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)

11.B站视频接口分析:

关于bilibili视频下载的一些小思路

12.QT托盘:

(1)

qt 之 QSystemTrayIcon(托盘程序整个例子)

(2)

Qt浅谈之三十系统托盘(QSystemTrayIcon)

(3)

Qt 之 QSystemTrayIcon

13.防止程序多开:

QT防止程序多次启动

  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: PyQt5是一个Python库,可以用于创建图形用户界面(GUI)应用程序。QChart是PyQt5中的一个模块,它可以用于绘制并显示各种类型的图表。 要读取Excel文件并在PyQt5中使用QChart进行图表绘制,可以按照以下步骤进行: 1. 首先,确保已经安装了PyQt5和pandas库。可以使用pip命令在终端中安装它们: ``` pip install pyqt5 pip install pandas ``` 2. 导入所需的模块和类: ```python from PyQt5.QtWidgets import QVBoxLayout, QApplication, QMainWindow, QWidget, QChartView from PyQt5.QtCore import Qt from PyQt5.QtChart import QChart, QLineSeries import pandas as pd ``` 3. 创建一个QChart对象和一个QLineSeries对象: ```python chart = QChart() line_series = QLineSeries() ``` 4. 使用pandas库读取Excel文件中的数据: ```python data_frame = pd.read_excel('data.xlsx') ``` 5. 将数据添加到QLineSeries对象中: ```python for i in range(len(data_frame)): x = data_frame.iloc[i, 0] # 假设x值在第一列 y = data_frame.iloc[i, 1] # 假设y值在第二列 line_series.append(x, y) ``` 6. 将QLineSeries对象添加到QChart对象中: ```python chart.addSeries(line_series) ``` 7. 创建一个QChartView对象,将QChart对象添加到其中: ```python chart_view = QChartView(chart) ``` 8. 创建一个QWidget对象,并将QChartView对象添加到其中: ```python widget = QWidget() layout = QVBoxLayout() layout.addWidget(chart_view) widget.setLayout(layout) ``` 9. 创建一个QMainWindow对象,并将QWidget对象添加为其中心窗口: ```python main_window = QMainWindow() main_window.setCentralWidget(widget) main_window.show() ``` 现在,Excel文件中的数据已经读取并绘制成图表,可以通过运行该程序来查看结果。请注意,上述代码中的'data.xlsx'是Excel文件的文件名,根据实际情况进行修改。 ### 回答2: 在PyQt5中,可以使用QChart来读取Excel文件。 首先,需要安装openpyxl库,该库可以让我们在Python中读取和写入Excel文件。 使用openpyxl库的第一步是导入它: ```python import openpyxl ``` 然后,需要创建一个QChart对象,用于存储Excel数据。可以使用openpyxl库中的`load_workbook`函数来打开Excel文件: ```python workbook = openpyxl.load_workbook('example.xlsx') ``` 其中,'example.xlsx'是Excel文件的路径。 接下来,可以通过`get_sheet_names`方法获取工作簿中的所有表格名称: ```python sheets = workbook.sheetnames ``` 然后,可以选择要读取的表格。假设要读取第一个表格,可以使用`get_sheet_by_name`方法: ```python sheet = workbook.get_sheet_by_name(sheets[0]) ``` 可以使用`iter_rows`方法逐行读取表格中的数据,然后将数据添加到QChart对象中: ```python chart_data = [] for row in sheet.iter_rows(values_only=True): chart_data.append(row) ``` 最后,可以关闭Excel文件: ```python workbook.close() ``` 至此,QChart对象已成功读取了Excel文件中的数据。 需要注意的是,这只是一个简单的示例,如果要处理更复杂的Excel文件,可能需要更多的代码和逻辑。 以上就是使用QChart在PyQt5中读取Excel文件的方法。 ### 回答3: 在PyQt5中使用QChart读取Excel文件的步骤如下: 1. 首先,需要安装PyQt5库,可以使用命令 `pip install PyQt5` 来进行安装。 2. 导入所需的类库,包括`QChart`、`QChartView`和`QBarSet`等: ```python from PyQt5.QtChart import QChart, QChartView, QBarSet from PyQt5.QtGui import QPainter from PyQt5.QtCore import Qt import openpyxl ``` 3. 使用`openpyxl`库读取Excel文件的数据,可以使用以下代码: ```python wb = openpyxl.load_workbook('data.xlsx') ws = wb['Sheet1'] data = [] for row in ws.iter_rows(min_row=2, values_only=True): data.append(row) ``` 这段代码会将Excel文件中的数据读取到`data`列表中。 4. 创建一个`QBarSet`对象,并将读取到的数据添加到该对象中: ```python bar_set = QBarSet("Data") for value in data: bar_set.append(value) ``` 5. 创建一个`QChart`对象,并将`QBarSet`对象添加到该对象中: ```python chart = QChart() chart.addSeries(bar_set) ``` 6. 创建一个`QChartView`对象,并设置该对象的属性: ```python chart_view = QChartView(chart) chart_view.setRenderHint(QPainter.Antialiasing) chart_view.setMinimumSize(800, 600) ``` 7. 最后,显示图表: ```python chart_view.show() ``` 以上就是使用PyQt5中的QChart读取Excel文件的简单示例。需要注意的是,读取Excel文件需要安装openpyxl库,并将Excel文件保存在当前工作目录中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值