python中Pyqt5使用Qlabel标签进行视频播放
作者:??牧子川???? 发布时间:2021-12-19 13:32:20
Pyqt5安装并配置到pycharm方法:教你如何用pycharm安装pyqt5及其相关配置
一、简介
QLabel是界面中的标签类,继承自QFrame类,提供文本和图像的显示,是一种展示控件。
QLabel对象可以显示不可编辑的文本或图片,可以放置一个GIF动画,还可以被用作提示标记为其他控件。
纯文本、链接或富文本也可以显示在标签上。
二、基本用法
2.1 QLabel控件
setAlignment()
:按固定值方式对齐文本,有以下对齐方式:
Qt.AlignLeft(水平方向靠左对齐) 、Qt.AlignRight(水平方向靠右对齐)、Qt.AlignCenter(水平方向居中对齐)、Qt.AlignJustify(水平方向调整间距两端对齐)、Qt.AlignTop(垂直方向靠上对齐)、Qt.AlignBottom(垂直方向靠下对齐)、Qt.AlignVCenter(垂直方向居中对齐)
setIndent():设置文本缩进
setPixmap():设置QLabel为一个Pixmap图片
text():获得QLabel的文本内容
setText():设置QLabel的文本内容
selectedText():返回所选择的字符
setBuddy():设置伙伴关系
setWordWrap():设置是否允许换行
2.2 QLabel常用的信号(事件)
1.linkHovered:当鼠标指针滑过标签中嵌入的超链接时,需要用槽函数与这个信号进行绑定
2.linkActivated:当单击标签中嵌入的超链接,希望在新窗口中打开这个超链接时,setOpenExternalLinks特性必须设置为true
三、QLabel播放视频
使用QLabel播放视频文件的重点就在****定时器QTimer
当程序中需要显示时间时或者需要在程序中周期性地进行某项操作,就会用到定时器
3.1 QTimer
导入QTimer模块:
from PyQt5.QtCore import QTimer
初始化:
self.timer_camera = QTimer()
计时并启动:
self.timer_camera.start(1000) # 1000ms == 1s
self.timer_camera.timeout.connect(self.openFrame) # 连接槽函数openFrame
注意:当QTimer的父对象被销毁时,它也会被自动销毁。
3.2 代码
UI界面:
python程序:
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.uic import loadUiType
import cv2
import sys
vedio_ui, _ = loadUiType('./UI/vedio.ui')
class VedioGui(QMainWindow, vedio_ui):
# 定义构造方法
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.timer_camera = QTimer()
self.handle_buttons()
self.open_vedio()
# 所有Button的消息与槽的通信
def handle_buttons(self):
self.btn_Start.clicked.connect(self.Btn_Start)
self.btn_Stop.clicked.connect(self.Btn_Stop)
def Btn_Start(self):
# 定时器开启,每隔一段时间,读取一帧
self.timer_camera.start(100)
self.timer_camera.timeout.connect(self.OpenFrame)
def Btn_Stop(self):
# self.cap.release()
self.timer_camera.stop()
def open_vedio(self):
"""选取视频文件"""
# 这里以mp4和avi视频播放为例
openfile_name = QFileDialog.getOpenFileName(self, 'chose files', '', 'Image files(*.mp4 *.avi)') # 打开文件选择框选择文件
self.file_name = openfile_name[0] # 获取图片名称
# 得到文件后缀名 需要根据情况进行修改
suffix = self.file_name.split("/")[-1][self.file_name.split("/")[-1].index(".") + 1:]
# print(self.file_name, suffix)
if self.file_name == '':
pass
elif suffix == "mp4" or suffix == "avi":
self.cap = cv2.VideoCapture(self.file_name)
def OpenFrame(self):
ret, image = self.cap.read()
if ret:
if len(image.shape) == 3:
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
vedio_img = QImage(image.data, image.shape[1], image.shape[0], QImage.Format_RGB888)
elif len(image.shape) == 1:
vedio_img = QImage(image.data, image.shape[1], image.shape[0], QImage.Format_Indexed8)
else:
vedio_img = QImage(image.data, image.shape[1], image.shape[0], QImage.Format_RGB888)
self.vedio_label.setPixmap(QPixmap(vedio_img))
self.vedio_label.setScaledContents(True) # 自适应窗口
else:
self.cap.release()
self.timer_camera.stop()
# 界面关闭事件,询问用户是否关闭
def closeEvent(self, event):
reply = QMessageBox.question(self, '退出', "是否要退出该界面?",
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
self.close()
event.accept()
else:
event.ignore()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = VedioGui()
window.show()
sys.exit(app.exec_())
视频播放成功显示:
注:视频播放没有声音
来源:https://juejin.cn/post/7083511739827879943
猜你喜欢
- 对于编译型的语言,比如C#中的一个.cs文件,Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块)
- 前言异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。常用检测方法3σ原则和箱型图。其中,3σ原则只适用服从正态分布的数据
- 已解决selenium模块利用performance获取network日志请求,抛出异常selenium.common.exceptions
- 一、概述公司需要通过网页用户认证登录实现上网,网络设备判断当前帐号12小时没有没上网将会自动断开帐号上网,每天早上上班第一件事就是打开用户认
- 目录前言super的用法super的原理Python super()使用注意事项混用super与显式类调用不同种类的参数总结前言Python
- 一、缓存目的1、减小过载2、避免重复计算3、提高系统性能二、如何进行缓存三、缓存类型四、缓存粒度分类五、缓存的设置与使用示例一:CACHES
- 第一段代码:#!/usr/bin/python# -*- coding: utf-8 -*-import emailimport mimet
- 一、分类问题损失函数——交叉熵(crossentropy)交叉熵刻画了两个概率分布之间的距离,是分类问题中使用广泛的损失函数。给定两个概率分
- 如何在读取Excel文件时创建列表的下拉菜单?代码如下,用来创建工作表列表的下拉菜单: < select 
- 在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert 就显得非常有用。python as
- Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者
- tkinter禁用(只读)下拉列表Comboboxtkinter将下拉列表框Combobox控件的状态设置为只读,也就是不可编辑状态:# 定
- gchart是基于google图表API的jquery组件。使用gchart可以方便地生成强大的各种图表和报表。基于google图表接口的g
- 流动网页设计有很多好处,但也只有在正确使用的时候。合适的技巧会使页面在大屏幕、小屏幕抑、PDA小屏幕上都能得到良好的呈现。但是,糟糕的代码结
- Pytorch 多分类模型绘制 ROC, PR 曲线(代码 亲测 可用)ROC曲线示例代码import torchimport torch.
- 本文实例讲述了python概率计算器实现方法。分享给大家供大家参考。具体实现方法如下:from random import randrang
- 一、私有化上篇说过封装,既将我们不想让别人看到代码的内容,但是又需要用到的内容,通过类内部调用来实现调用。说到这里却不得不提一下上篇的:cl
- 接触Python时间不长,对有些知识点,掌握的不是很扎实,我个人比较崇尚不管学习什么东西,首先一定回去把基础打的非常扎实了,再往高处走。今天
- 在IE6中背景属性加 a 与 a:hover 两者的伪类结合,在正常逻辑下为何不起作用?测试这问题存在IE6及以下浏览器,这问题我经常遇到在
- PHP 跳转,即重定向浏览器到指定的 URL,是一个很常见的功能。这种功能也有一些细节性的要求,比如等待多少秒以后跳转,用不用JavaScr