PYQT中QtMultimedia模块使用及处理

PYQT中,使用QtMultimedia模块,播放视频。

本文可以实现的功能是点击播放按钮,可以播放视频;点击暂停按钮,可以停止播放视频;拉动进度条,可以定位视频播放位置。

附上代码:

from PyQt5.QtCore import QUrl
import PyQt5.QtWidgets
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import QVideoWidget
class My_widget(QWidget):
    def __init__(self):
        super().__init__()
        self.player = QMediaPlayer()
        self.videowidget = QVideoWidget()  # 定义视频显示的widget
        self.resize(700, 700)
        self.layout = QVBoxLayout()
        self.h_layout = QHBoxLayout()
        self.layout.addWidget(self.videowidget)
        self.btn_start = QPushButton()
        self.btn_start.setText("开始")
        self.btn_stop = QPushButton()
        self.btn_stop.setText("暂停")
        self.Slider = QSlider(Qt.Horizontal, self)
        self.Slider.setRange(0, 100)
        self.Slider.show()
        self.layout.addWidget(self.btn_start)
        self.layout.addWidget(self.btn_stop)
        self.layout.addWidget(self.Slider)
        self.player.durationChanged.connect(self.print_data)
        self.btn_stop.clicked.connect(self.play_pause)
        self.btn_start.clicked.connect(self.play_start)
        self.Slider.valueChanged.connect(self.slider_change)
        self.player.positionChanged.connect(self.player_change)
        self.setLayout(self.layout)
    def show_video(self):
        self.show()
        self.player.setVideoOutput(self.videowidget)  # 视频播放输出的widget,就是上面定义的
        self.videopath = "D:\\MYVIDEO.MP4"
        frame =QMediaContent(QUrl.fromLocalFile(self.videopath))
        frame = QMediaContent(frame)
        self.player.setMedia(frame)  # 选取视频文件
        self.player.play()  # 播放视频
        self.btn_start.setEnabled(False)

    def print_data(self):
        self.Slider.setRange(0, self.player.duration())

    def player_change(self):
        self.Slider.setValue(int(self.Slider.value()))

    def slider_change(self):
        self.player.setPosition(float(self.Slider.value()))

    def play_pause(self):
        self.player.pause()
        self.btn_start.setEnabled(True)

    def play_start(self):
        self.btn_start.setEnabled(False)
        self.player.play()
        self.btn_stop.setEnabled(True)

    def closeEvent(self,event):
        self.play_pause()

注意:如果视频播放不出来,则是解析错误,此时需要下载LAV解析包。LAVFilters-0.74.1-x64,右键以管理员身份运行如下图的3个.dat文件。
在这里插入图片描述

热门文章

暂无图片
编程学习 ·

OpenCV的初步解读

OpenCV的初步解读图像读取:cv2.imread(path,flag)`` flag:如何读取图片:cv2.IMREAD_COLOR:读取彩色图像。图像的透明度会被忽略(默认参数)。 cv2.IMREAD_GRAYSCALE:读取灰度图像。 flag=-1, 8位深度,原通道 flag=0, 8位深度 1通道 flag=1, 8位…
暂无图片
编程学习 ·

浅析原型模式中的clone()

更多精彩文章请访问我的个人博客(zhuoerhuobi.cn)最近学习到设计模式中的原型模式,在学习过程中,产生了对clone()实现的原理和效率的兴趣。原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的…
暂无图片
编程学习 ·

C++排雷:16. #pragma warning的几种用法

#pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效。当该文件编译结束,设置也就失去作用。 #pragma warning(push)是保存当前的编译器警告状态;#pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到…
暂无图片
编程学习 ·

UE4中让某个UI位于窗口的最顶端

1.处于同一嵌套层级的UI 可以使用Set ZOrder 设置那个Widget位于屏幕的最前面2.创建一个user widget 叫做ui_umg,里面加上两个按钮3.创建另外一个widget 叫做ui_pic,里面加上一个image4.这步是重点,ui_umg中按钮点击的时候 使用create widget 生成一个ui_pic, 但是这个时…
暂无图片
编程学习 ·

什么是次世代游戏?科普次世代游戏角色制作过程

一、什么是次世代游戏 次世代这个名字源自日语,即下一个时代,未来的时代。既然说它来自最先进的时代,那么次世代游戏肯定相比传统游戏画质更高,品质更好呀。与传统游戏相比,次世代游戏能够以精简的面数表达出高精度模型效果,各种材质和纹理贴图效果也更写实,更注重质感的…
暂无图片
编程学习 ·

echarts关系图多条连线

最近用echarts做图的关系实现图数据结构连接线会重合,解决办法 import Graph from echarts/lib/data/Graph import echarts from echartsconst Edge = Graph.Edge const Node = Graph.Nodefunction generateNodeKey(id) {return _EC_ + id; }Graph.prototype.addEdge = functi…
暂无图片
编程学习 ·

解决 java “错误:编码GBK 的不可映射字符”

今天一个学弟遇到这样的问题,如下图所示。 看到这样的问题,我的思考是: 1.首先是使用javac -version查看环境变量是否正确 2.然后查看编译路径是否存在中文 3.查看代码本身是否有中英文符号混淆 4.右击dos窗口,查看其属性中的编码集是否是utf-8 代码本身没问题,可以在exli…
暂无图片
编程学习 ·

C++--找出三条能构成三角形且周长最大的边的一个普通方法

题目:给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。 #输出示例 输入:[2,1,2] 输出:5 输入:[1,5,1] 输出:0 输入:[3,2,3,4] 输出:10 输入:[3,6,2,3] 输出:8 #inclu…
暂无图片
编程学习 ·

神经网络架构搜索——可微分搜索 (Noisy-DARTS)

神经网络架构搜索——可微分搜索 (Noisy-DARTS)动机FairDARTS: Sigmoid函数替换Softmax函数NoisyDARTS:skip-connection注入噪声方法实现如何加噪声?加入怎样的噪声?实验结果架构参数可视化CIFAR-10实验结果ImageNet实验结果消融实验有噪声 vs. 无噪声无偏噪声 vs. 有偏噪…
暂无图片
编程学习 ·

mysql怎么连接navicat

可能出现下面的问题远程连接发现没有什么问题 在命令行 mysql可以正常使用执行三条指令就可以解决
暂无图片
编程学习 ·

react学习记录-PropTypes 和组件参数验证

文章目录PropTypes 和组件参数验证PropTypes PropTypes 和组件参数验证 JavaScript 语言的弱类型,让我们写代码很爽,但是也很容易出 bug。 变量没有固定类型可以随意赋值,在我们构建大型应用程序的时候并不是什么好的事情。你写下了 let a = {} ,如果这是个共享的状态并且在…
暂无图片
编程学习 ·

快手2020校园招聘秋招笔试--工程B试卷

攻击者使用无效IP地址,利用TCP连接的三次握手过程,连续发送会话请求,使受害主机处于开放会话的请求之中,直至连接超时,最终因耗尽资源而停止响应。这种攻击被称为A. DNS欺骗攻击 B. DDoS攻击 C. SYN Flooding攻击 D. 重放攻击DNS欺骗攻击:DNS(Domin Name Sever)是域名服…
暂无图片
编程学习 ·

ConcurrentHashMap 在 Java7 和 8 有何不同?

ConcurrentHashMap 在 Java7 和 8 有何不同? 文章目录ConcurrentHashMap 在 Java7 和 8 有何不同?前言1.Java 72.Java 83.重要的方法回顾3.1 Node 数组3.2 put 方法3.3 get 方法4.对比Java7 和Java8 的异同和优缺点4.1 数据结构不同4.2 并发度4.3 保证并发安全的原理4.4 遇到…
暂无图片
编程学习 ·

叩丁狼开发工程师:SSR服务架构特点分析

叩丁狼开发工程师:SSR服务架构特点分析SSR服务架构是我们在搭建一些开放性平台的时候需要添加的一项功能应用,而今天成都软件开发工程师就通过案例分析来了解一下,关于SSR服务架构的特点都有哪些内容?1、抵抗单页面大流量 要抵抗单页面的大流量,先我们自然而然会想到会使用…
暂无图片
编程学习 ·

requests实现token鉴权-学习笔记总结

import requests# 第一步 登录 获取token值 login_url = "http://api.lemonban.com/futureloan/member/login" # 登录地址 login_data = {"mobile_phone":"18311783673","pwd":"1234567890"} # 登录数据 hea…
暂无图片
编程学习 ·

bootAnimation有卡顿

因为我是Mac操作的文件,里面包含了隐藏文件 .DS_Store 文件 需要把 .DS_Store 删除 解决方案1.删除所有隐藏.DS_store文件,打开命令行窗口sudo find / -name ".DS_Store" -depth -exec rm {} \; 2.设置不再产生选项, 执行如下命令defaults write com.apple.desktop…
暂无图片
编程学习 ·

使用hibernate框架完成CRUD操作

1.ORM思想: 简单来说就是对数据库中的表的字段和Java实体类中属性的映射O: Object , 表示Java应用中的实体类R: Relational关系型数据表M:映射例如在数据库中有一张表t_ser , t_user表中有三个字段 id,name,age , Java对象中有一个实体类与之映射User,User类中有三个属性id,nam…