当前位置: 首页 > news >正文

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秒小的进度位置,否则会提示“不支持将进度调整到此处!”,从代码层面避免了“刷课”的操作。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7bbc80165f9d45b19f790fa1fa8bf073.pngv

4.播放列表折叠

右侧的播放列表是支持折叠的,可以点击播放控制区域最右下角的按钮来展开、折叠。
在这里插入图片描述

5.添加课程

我们可以通过点击最左下角的“添加课程”按钮来添加课程,点击之后系统会弹出“文件夹选择对话框”,
在这里插入图片描述
这里我添加了“大数据”的课程到学习列表。
在这里插入图片描述

三.心得与分享

1.数据本地化

本次使用sqlite3记录课程数据与播放进度,一共包括一个数据表(courses),此数据表的建表语句是

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.免责声明

本软件系统仅供学习交流,博客内截图为演示视频,请大家尊重原版
《机器学习初步》南京大学周志华教授亲讲!西瓜书全网最详尽讲解机器学习最完整教程!_附教材电子版本

四.总结

今天和大家分享了我开发的仿网课答题播放器系统,此系统功能强大,使用流程图的方式理清了整个的系统的工作流程,博客很干,需要软件的朋友请私聊博主!
在这里插入图片描述

大家快点击这里↓来私聊我吧~

相关文章:

  • System.out 详解
  • ts与面向对象
  • trivy开源安全漏洞扫描器——筑梦之路
  • 操作系统:进程是一个非常重要的抽象概念
  • QML 样式库
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类尺寸QSizeF)
  • Java发生OOM是否必然导致JVM退出
  • 【工具变量】A股上市企业数据资产披露水平数据集(2000-2023年)
  • 8.QT-按钮类控件|Push Button|Radio Button|Check Box|Tool Button(C++)
  • 提交bug单时,应该说明哪些信息?
  • 强制重装及验证onnxruntime-gpu是否正确工作
  • 借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
  • C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)
  • HTTP 2.0 和 3.0 的区别
  • DSN主从同步
  • Linux系统中iptables防火墙
  • 松灵Cobot Magic双臂具身遥操机器人(基于ROS的定位建图与协同导航技术)
  • DeepSeek 即将联合 vLLM 开源推理引擎
  • AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型
  • C++ 俄罗斯方块 | Tetris⚡YQW · Studio ⚡【无需下载图片】
  • 著名哲学家、中山大学哲学系原系主任李锦全逝世
  • 印控克什米尔26名游客遭恐袭丧生后,印度对巴宣布多项反制措施
  • 九江市人大常委会原党组成员、副主任戴晓慧主动交代问题,正接受审查调查
  • 动力电池、风光电设备退役潮来袭,国家队即将推出“再生计划”
  • 著名世界语教育家、翻译家魏以达逝世
  • “雷公”起诉人贩子王浩文案将开庭:索赔6元,“讨个公道”