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.免责声明
本软件系统仅供学习交流,博客内截图为演示视频,请大家尊重原版
《机器学习初步》南京大学周志华教授亲讲!西瓜书全网最详尽讲解机器学习最完整教程!_附教材电子版本
四.总结
今天和大家分享了我开发的仿网课答题播放器系统,此系统功能强大,使用流程图的方式理清了整个的系统的工作流程,博客很干,需要软件的朋友请私聊博主!
大家快点击这里↓来私聊我吧~
相关文章:
python3GUI--仿网课答题播放器 By:PyQt5(分享)
文章目录 一.前言二.相关知识1.PyQt52.QMediaPlayer3.QThread4.Sqlite3 二.展示1.主界面2.课程播放&问答3.字幕调整4.播放列表折叠5.添加课程 三.心得与分享1.数据本地化2.自定义组件3.系统流程图与代码量4.免责声明 四&#…...
Python基础总结(八)之循环语句
文章目录 一、for循环1.1 for循环格式1.2 for ...else1.3 for...break1.4 for...continue 二、while循环2.1 while循环格式2.2 while...break2.3 while...continue2.4 while ...else 循环语句就如其名,就是重复的执行一段代码,直到满足退出条件时&#x…...
21. git apply
基本概述 git apply 的作用是:应用补丁文件 基本用法 1.命令格式 git apply [选项] <补丁文件>2.应用补丁 git apply patchfile.patch将补丁应用到工作目录,但不会自动添加到暂存区(需手动 git add) 常用选项 1.检查…...
第一章:MySQL视图基础
1. 视图是什么? 定义:视图(View)是一种虚拟表,其内容基于一个或多个真实表(基表)的查询结果。视图不实际存储数据,而是通过查询动态生成数据。核心特点:…...
深入理解基线检查:网络安全的基石
深入理解基线检查:网络安全的基石 一、引言 在信息技术飞速发展的今天,网络安全已成为企业和组织正常运营的关键保障。从日常办公系统到关键业务应用,任何环节的安全漏洞都可能导致严重的后果,如数据泄露、系统瘫痪等。基线检查作…...
33-公交车司机管理系统
技术: 基于 B/S 架构 SpringBootMySQLvueelementui 环境: Idea mysql maven jdk1.8 node 用户端功能 1.首页:展示车辆信息及车辆位置和线路信息 2.模块:车辆信息及车辆位置和线路信息 3.公告、论坛 4.在线留言 5.个人中心:修改个人信息 司机端功能…...
【AI实践】使用DeepSeek+CherryStudio绘制Mermaid格式图表
目录 工具准备创建DeepSeek API Key安装CherryStudioMermaid在线编辑器 绘制图表编写提示词在CherryStudio中调用DeepSeek复制源码到Mermaid编辑器中进行微调 图表示例流程图思维导图甘特图 工具准备 创建DeepSeek API Key 打开DeepSeek开放平台, 注册并充值成功后…...
TCP报文段解析:从抽象到具象的趣味学习框架
TCP报文段解析:从抽象到具象的趣味学习框架 一、What:TCP报文段长什么样? 核心结构(类比快递包裹): 复制 下载 | 源端口(16位)| 目的端口(16位)| |-----…...
B+树节点与插入操作
B树节点与插入操作 设计B树节点 在设计B树的数据结构时,我们首先需要定义节点的格式,这将帮助我们理解如何进行插入、删除以及分裂和合并操作。以下是对B树节点设计的详细说明。 节点格式概述 所有的B树节点大小相同,这是为了后续使用自由…...
rollup使用讲解
rollup 总结 什么是 rollup? rollup 是一个 JavaScript 模块打包器,在功能上要完成的事和 webpack 性质一样,就是将小块代码编译成大块复杂的代码,例如 library 或应用程序。在平时开发应用程序时,我们基本上选择用 webpack,相比之下,rollup.js 更多是用于 library 打…...
高边开关和低边开关的区别
高边驱动和低边驱动的区别 在高边驱动和低边驱动中,开关的位置直接影响电路在负载短路时的安全性和电流路径。以下是关键原理的分步解释: 1. 高低边驱动的结构对比 高边驱动(High-Side Drive) 电路结构: 电源正极 →…...
PG psql --single-transaction 参数功能
文章目录 PG psql --single-transaction 参数功能 PG psql --single-transaction 参数功能 test.sql 文件 create table test1(id int); CREATE OR REPLACE FUNCTION func_test() RETURNS INTEGER AS $BODY$ BEGINxxxreturn 0; END; $BODY$ LANGUAGE plpgsql VOLATILE CALLE…...
C++ 多态
1.多态的概念 多态(polymorphism)通俗来说就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态),这里我们重点是运行时多态,编译时多态主要就是我们前面的函数重载和…...
【matlab|python】矢量棍棒图应用场景和代码
【matlab|python】矢量棍棒图应用场景和代码 矢量棍棒图的介绍和作用 矢量棍棒图(stick plot)是一种用于可视化 方向性时间序列数据 的图形工具。它常用于大气科学和海洋科学中,以直观地展示 风场、海流 或 其他矢量变量 随时间的变化情况。 …...
Matlab 五相电机仿真
1、内容简介 Matlab 208-五相电机仿真 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
计算机视觉cv2入门之视频处理
在我们进行计算机视觉任务时,经常会对视频中的图像进行操作,这里我来给大家分享一下,如何cv2中视频文件的操作方法。这里我们主要介绍cv2.VideoCapture函数的基本使用方法。 cv2.VideoCapture函数...
力扣每日一题781题解-算法:贪心,数学公式 - 数据结构:哈希
https://leetcode.cn/problems/rabbits-in-forest/description/?envTypedaily-question&envId2025-04-20 781.推测兔子数 算法:贪心,数学公式 数据结构:哈希 用哈希存每个兔子报告的同色数量,作为key,同个key…...
MAC-QueryWrapper中用的exists,是不是用join效果更好
在使用MyBatis-Plus的QueryWrapper中的exists方法时,是否改为使用join效果会更好,以及如何 修改。这涉及到SQL优化和MyBatis-Plus的用法。 首先,需要理解exists和join在SQL中的区别。exists用于检查子查询是否返回结果,而join则是将 两个表连接起来,根据某些条件合并行…...
使用 Visual Studio 2022 中的 .http 文件
转自微软技术文档: https://learn.microsoft.com/zh-cn/aspnet/core/test/http-files?viewaspnetcore-9.0 Visual Studio 2022.http 文件编辑器提供了一种便捷的方式来测试 ASP.NET Core项目,尤其是 API 应用。 编辑器提供一个 UI,用于&am…...
相得益彰 — 基于 GraphRAG 事理图谱驱动的实时金融行情新闻资讯洞察
*本文为亚马逊云科技博客文章,仅用于技术分享,不构成投资建议或金融决策支持。文中涉及的公司名称仅用于技术示例,不代表亚马逊云科技观点或与这些公司的商业合作关系。 背景介绍 在当今这个信息爆炸的时代,金融市场每天都在产生…...
为什么this与super不能出现在同一构造器的原因
在 Java 中,this() 和 super() 不能同时出现在同一个构造器中,因为它们都必须作为构造器的第一条语句,而一个构造器的第一条语句只能有一个。以下是详细解释和示例: ⚠️ 核心规则 只能二选一: 每个构造器的第一条语句…...
Linux:网络基础
hello,各位小伙伴,本篇文章跟大家一起学习《Linux:网络基础》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞!…...
C++入门篇(下)
目录 1、引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 1.4.1 引用做参数 1.4.2 引用做返回值 1.5 引用和指针的区别 2、内联函数 2.1 概念 2.2 特性 3、auto关键字 4、基于范围的for循环 5、指针空值nullptr 5.1 C98 中的指针空值处理 5.2 C11 …...
QCustomPlot中自定义QCPAbstractPlottable绘图元素
QCPAbstractPlottable 是 QCustomPlot 中所有可绘制图形(如曲线、柱状图等)的基类。要创建自定义的绘图元素,通常需要继承这个类并实现其纯虚函数。 基本步骤 继承 QCPAbstractPlottable 实现必要的纯虚函数 添加自定义属性和方法 注册到 QCustomPlot 系统 完…...
【Bluedroid】蓝牙 HID 设备信息加载与注册机制及配置缓存系统源码解析
本篇解析Android蓝牙子系统加载配对HID设备的核心流程,通过btif_storage_load_bonded_hid_info实现从NVRAM读取设备属性、验证绑定状态、构造描述符并注册到BTA_HH模块。重点剖析基于ConfigCache的三层存储架构(全局配置/持久设备/临时设备)&…...
【计算机视觉】CV实战项目 - PCC-Net 人群计数
PCC-Net 人群计数项目 项目特点项目运行方式与步骤1. 环境准备2. 数据准备3. 模型训练4. 实验结果 常见问题及解决方法 PCC-Net(Perspective Crowd Counting via Spatial Convolutional Network)是一个用于人群计数的深度学习项目,旨在通过空…...
Towards Transferable Targeted 3D Adversarial Attack in the Physical World--阅读笔记
目录 简介: 背景: 挑战: 目的: 技术细节: 贡献: 1. NeRF的核心作用:3D重建与参数化表示 2. 对抗优化的创新:NeRF参数空间的双优化 2.1 传统方法的局限…...
opencv图像库编程
一、下载安装 opencv 1.1 下载安装包 1.2 解压缩 unzip opencv-3.4.11.zip 解压缩以后主目录文件夹如下: 1.3 进入到解压后的文件夹中 cd opencv-3.4.11 二、使用 cmake安装opencv 2.1 进入 root 用户,并更新一下 sudo su sudo apt-get update …...
星拍相机APP:时尚与科技的完美融合,打造你的专属美
在数字时代,手机相机不仅是记录生活的工具,更是表达个性和创意的平台。今天,我们要介绍的 星拍相机APP,就是这样一款匠心制作的手机相机应用。它融合了时尚与科技,提供了多样化的魔法美颜功能,让每一次拍摄…...
puzzle(0531)脑力航迹
目录 脑力航迹 规则 解法 简单模式 中等模式 困难模式 专家模式 脑力航迹 规则 2条航迹会产生一个相对航迹: 根据相对航迹和其中一个航迹推导另外一个航迹。 解法 没有任何需要推理的地方,就是纯粹的2个矢量相加。 简单模式 中等模式 困难模…...
【英语语法】词法---形容词
目录 形容词1. 形容词的核心功能2. 形容词的位置(1) 前置定语(最常见)(2) 后置定语(特殊情况)(3) 表语位置(系动词后) 3. 形容词的比较级与最高级(1) 规则变化(2) 不规则变化(3) 用法对比 4. 多个形容词修饰…...
理解 React 的 useEffect
文章目录 React 的 useEffect一、什么是副作用(Side Effects)?二、useEffect 的基本用法三、依赖数组的三种情况1. 无依赖数组(每次渲染后都执行, 不推荐)2. 空依赖数组(仅在挂载时执行一次)3. …...
2.1 基于委托的异步编程方法
基于委托的异步编程模型是 .NET 早期版本中实现异步操作的一种方式,主要通过 BeginInvoke 和 EndInvoke 方法来实现。这种基于委托的异步模式已被 Task 和 async/await 模式取代,但在维护旧代码时仍可能遇到这种模式。 委托的方法中:Invoke用于同步调用; 而BeginInvoke与E…...
对于在线教育或知识付费类网站视频处理方案
一、视频格式: 1. 推荐格式:HLS(HTTP Live Streaming) 优势: 自适应码率:根据用户网络状况自动切换清晰度,避免卡顿。广泛兼容性:iOS/macOS 原生支持,Android…...
Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容)
Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容) 目录 Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容)输入文本示例Gen - CDPT模型处理过程示例什么是:提示次优动态前缀提示方法生成与这条评论上下文…...
UCSC CTF 2025|MISC
1、USB flag{ebdfea9b-3469-41c7-9070-d7833ecc6102} 2、three part1是图片隐水印 part1:8f02d3e7 part2是2进制变换 -ce89-4d6b-830e- Part3先从pass.pcapng得到密码字典 解压缩密码:thinkbell 3个部分合并得到flag{8f02d3e7-ce89-4d6b-830e-5d0cb5…...
FTP客户端实现(文件传输)
文章目录 🧱 一、FTP 基础架构回顾🚀 二、FTP 客户端的核心结构🔗 三、连接与登录过程📌 1. ftp_create()📌 2. ftp_connect()📌 3. ftp_login() 📁 四、上传文件实现(ftp_upload_fi…...
状态管理最佳实践:Bloc架构实践
状态管理最佳实践:Bloc架构实践 引言 Bloc (Business Logic Component) 是Flutter中一种强大的状态管理解决方案,它基于响应式编程思想,通过分离业务逻辑和UI表现层来实现清晰的代码架构。本文将深入探讨Bloc的核心概念、实现原理和最佳实践…...
嵌入式人工智能应用-第三章 opencv操作 5 二值化、图像缩放
嵌入式人工智能应用 嵌入式人工智能应用-第三章 opencv操作 5 二值化 嵌入式人工智能应用1 二值化1.1 概念介绍1.2 函数介绍1.2 基本应用1.3 参考案例 2 图像缩放2.1 基本概念2.2 函数介绍2.3 基本参考代码2.4 pyrUp 和 pyrDown 函数2.5 函数介绍2.6 参考代码2.7 总结 1 二值化…...
[OS_7] 访问操作系统对象 | offset | FHS | Handle
实验代码可以看去年暑假的这篇文章:【Linux】进程间通信:详解 VSCode使用 | 匿名管道 我们已经知道,进程从 execve 后的初始状态开始,可以通过 mmap 改变自己的地址空间,通过 fork 创建新的进程,再通过 exe…...
【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)
这一节主要介绍创建帧缓冲(Framebuffer),创建命令池,创建命令缓存,和从文件加载 PNG 图像数据,解码为 RGBA 格式,并将像素数据暂存到 Vulkan 的 暂存缓冲区中。 一、创建帧缓冲 createFramebu…...
Linux 进程控制(自用)
非阻塞调用waitpid 这样父进程就不会阻塞,此时循环使用我们可以让父进程执行其他任务而不是阻塞等待 进程程序替换 进程PCB加载到内存中的代码和数据 替换就是完全替换当前进程的代码段、数据段、堆和栈,保存当前的PCB 代码指的是二进制代码不是源码&a…...
FreeSWITCH 简单图形化界面41 - 批量SIP视频呼叫测试
FreeSWITCH 简单图形化界面41 - 批量视频测试 0、界面预览00、安装测试工具1、注册分机2、设置接听选项2.1 上传媒体文件2.2 设置接听设置 3、呼叫测试 0、界面预览 http://myfs.f3322.net:8020/ 用户名:admin,密码:admin FreeSWITCH界面安…...
通过爬虫方式实现头条号发布视频(2025年4月)
1、将真实的cookie贴到代码目录中toutiaohao_cookie.txt文件里,修改python代码里的user_agent和video_path, cover_path等变量的值,最后运行python脚本即可; 2、运行之前根据import提示安装一些常见依赖,比如requests等; 3、2025年4月份最新版; 代码如下: import js…...
《AI大模型应知应会100篇》第28篇:大模型在文本创作中的应用技巧
第28篇:大模型在文本创作中的应用技巧 🧠 摘要 在内容为王的时代,AI大模型正在重塑文本创作的每一个环节。从创意构思到风格润色,从论文报告到小说脚本,AI不仅是创作者的助手,更是灵感的激发器。本文将带你…...
字节跳动发布UI-TARS-1.5,入门AI就来近屿智能
近日,字节跳动在 Hugging Face 平台正式开源了其最新多模态代理模型——UI-TARS-1.5。作为 UI-TARS 系列的革新之作,该模型以视觉语言模型为基础,突破性实现跨平台 GUI 自动化交互,为自动化与智能交互领域注入了强劲动能。无论是开…...
大数据学习栈记——MapReduce技术
本文介绍hadoop中的MapReduce技术的应用,使用java API。操作系统:Ubuntu24.04。 MapReduce概述 MapReduce概念 MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序…...
GO语言入门:常用数学函数2
14.6 大型数值 math/big 包中公开了一些实用 API,用于表示大型整数值和浮点数值。当基础类型无法容纳要使用的数值时,应改用 big 包中提供的新类型。例如 Int、Float 等。 14.6.1 大型整数值之间的运算 若希望让下面两个整数值完成加、减法运算&#…...
Django 使用教程
Django 使用教程 Django 是一个高级的 Python Web 框架,采用了 MTV(Model-Template-View)设计模式,旨在帮助开发者快速构建高效、可维护的 Web 应用。它有着非常丰富的功能,包括 ORM、用户认证、表单处理、管理后台等…...
deepseek + kimi制作PPT
目录 一、kimi简介二、deepseek生成内容三、生成PPT四、编辑PPT 一、kimi简介 kimi是一款只能ppt生成器,擅长将文本内容生成PPT。 在这里,DeepSeek 负责内容生成与逻辑梳理,Kimi 优化表达与提供设计建议。 二、deepseek生…...