python3GUI--仿网课答题播放器 By:PyQt5(分享)
文章目录
- 一.前言
- 二.相关知识
- 1.PyQt5
- 2.QMediaPlayer
- 3.QThread
- 4.Sqlite3
- 二.展示
- 1.主界面
- 2.课程播放&问答
- 3.字幕调整
- 4.播放列表折叠
- 5.添加课程
- 三.心得与分享
- 1.数据本地化
- 2.自定义组件
- 3.系统流程图与代码量
- 4.免责声明
- 四.总结
本系统未打包,需要代码请私聊
一.前言
本次给大家大来我使用PyQt5开发的仿网课答题播放器,这款播放器相当智能,模仿了中国大学MOOCh5播放器制作的PC版本桌面端播放器,支持课程导入、课程播放暂停、展示字幕和视频题目、智能暂停、播放进度记录…本系统属于定制化开发,大家拭目以待
二.相关知识
1.PyQt5
PyQt5 是 Python 的一个图形界面开发框架,它是 Qt 应用程序框架的 Python 绑定。通过 PyQt5,开发者可以使用 Python 语言创建功能丰富、跨平台的桌面应用程序。它支持多种控件、布局管理、事件处理和自定义界面设计,同时还提供了对数据库、网络、图形视图等功能模块的支持,适合快速开发高质量的 GUI 程序。
2.QMediaPlayer
QMediaPlayer 是 PyQt5 中用于音频和视频播放的类,属于 QtMultimedia 模块。它提供了一个高层次的接口,允许开发者在应用程序中方便地加载、播放、暂停、停止多媒体文件。QMediaPlayer 支持本地文件和网络流媒体,并可与 QVideoWidget 或 QGraphicsVideoItem 配合使用,实现视频的可视化播放。它还提供音量控制、播放进度、播放状态等属性和信号,便于开发交互性强的多媒体功能。
3.QThread
QThread 是 PyQt5 中用于实现多线程编程的类,属于 QtCore 模块。它允许开发者在主线程之外创建和管理工作线程,从而提高程序的响应能力,尤其适用于耗时操作(如文件处理、网络请求、复杂计算等),防止界面卡顿。
在 PyQt5 中,常见的使用方式是继承 QThread 并重写其 run() 方法,将耗时操作放入其中执行。QThread 还支持信号与槽机制,可以安全地在不同线程之间传递数据,实现线程间通信。
合理使用 QThread 可以显著提升 GUI 应用的性能和用户体验。
4.Sqlite3
本次使用Sqlite3进行播放进度的记录
sqlite3 是 Python 内置的轻量级数据库模块,提供了对 SQLite 数据库的支持。SQLite 是一个嵌入式关系型数据库,它将整个数据库存储在一个文件中,不需要单独的数据库服务器,非常适合中小型项目或桌面应用程序使用。
通过 sqlite3,开发者可以使用 SQL 语句对数据库进行创建、查询、更新、删除等操作。它支持事务处理、参数化查询、防止 SQL 注入,并且易于与 PyQt5 结合,实现数据的持久化存储。例如,可以在 PyQt5 的界面中操作数据库记录,用于用户信息管理、设置保存、日志记录等功能。
由于其零配置、跨平台、体积小的特点,sqlite3 是开发本地数据库应用的理想选择。
二.展示
1.主界面
软件启动后进入主界面,软件会自动加载课程列表到播放器右侧,由于当前没有在播放的课程内容,所以左侧播放区域是空白的,播放器底部是播放控制区域,支持用户调整音量、查看播放进度、全屏、控制播放列表显示与隐藏。
2.课程播放&问答
我们双击右侧的播放列表里的课程,如果有播放进度的话,系统会询问我们是否继续播放,用户点击YES之后会继续之前的进度进行播放,点NO的话会从头开始播放。播放列表是支持折叠的,第一层为课程目录,内层为视频课内容。
继续播放进度
课程播放,问答
当系统检测到有新的问答题目产生时,会将播放列表右侧的tab切换到“问题回答”并且展示新的问答题目,题目的类型包括:单选题、多选题、判断题,学生回答完题目之后手动点击画面或者播放器下方的“继续播放”按钮即可继续播放,
学完一节
当前视频学习完成后,“问题回答”tab最底部会弹出两个按钮,分别是“提交答案”,“重新学习”,重新学习的话,视频会重新播放,提交答案的话,系统会自动检测所有问题是否全部回答,如果没有全部回答,则会继续提醒学生要回答全部的问题才能提交。提交完答案后,系统自动切换到下一节,如果当前为最后一节,则提示“恭喜你,已经学完所有课程!”
3.字幕调整
我们的视频是支持vtt字幕读入的
VTT 字幕(全称:WebVTT,Web Video Text Tracks)是一种基于文本的字幕格式,主要用于网页视频的字幕显示。它是 HTML5 标签支持的标准格式,用于同步显示字幕、说明文字、翻译或其他元数据。
VTT 文件的扩展名通常为 .vtt,内容结构清晰,易于编写和解析。文件开头一般以 WEBVTT 开头,后面是一个或多个字幕片段。每个片段包括时间轴(显示时间范围)和字幕文本,例如:
VTT 支持基本的文本样式(如粗体、斜体)、位置信息和语义标签,适用于视频辅助功能、外语翻译、学习辅助等场景。由于其标准性和简洁性,VTT 被广泛用于视频平台和多媒体网页中。
下图为本系统支持的vtt字幕格式
我们的系统读入vtt字幕之后,会加载到“字幕调整”tab,在课程播放的同时,会将当前字幕同步到播放器下方,实现视频与字幕播放同步。
这里指的一提的是,学生在学习过程中可以点击进度条或者字幕调整播放进度,虽然能调整进度,但是只允许调整到当前播放时间之前的进度,比如当前播放到30秒,只允许调整到比30秒小的进度位置,否则会提示“不支持将进度调整到此处!”,从代码层面避免了“刷课”的操作。
,此数据表的建表语句是
CREATE TABLE IF NOT EXISTS courses (id INTEGER PRIMARY KEY AUTOINCREMENT,video_md5 TEXT NOT NULL,total_duration INTEGER NOT NULL,watched_duration INTEGER NOT NULL,video_path TEXT NOT NULL);
数据库示例数据为:
值得一提的是,每条数据入库之前都会对视频文件进行md5运算,这保证了数据的唯一性,避免了重复添加,更好的统一管理数据。
2.自定义组件
本次的系统设计仍然脱离了QT设计师,采用自定义组件保证了本系统的整体UI一致性,也提高了定制化的水平,这里拿“播放列表”这个组件举例子,我们能单独调试运行此组件,避免了整体测试的前置操作也提高了软件代码的可复用性。
3.系统流程图与代码量
代码量为1500行
系统流程图见下图
4.免责声明
本软件系统仅供学习交流,博客内截图为演示视频,请大家尊重原版
《机器学习初步》南京大学周志华教授亲讲!西瓜书全网最详尽讲解机器学习最完整教程!_附教材电子版本
四.总结
今天和大家分享了我开发的仿网课答题播放器系统,此系统功能强大,使用流程图的方式理清了整个的系统的工作流程,博客很干,需要软件的朋友请私聊博主!
大家快点击这里↓来私聊我吧~