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


猜你喜欢
- With语句是什么?有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个
- 对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于
- 实现的功能:在win7下,每天晚上1点,自动将 F:/data中所有文件进行压缩,以[mongodb+日期]命名,将压缩好的文件存储在本地目
- 我们可用一个函数来实现小数转分数,不过只能转换能够整除的分数:Public Function XtoF(str 
- [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1、生成一
- 如下所示:from openpyxl import workbookfrom openpyxl import load_workbookfr
- 获取标签内容使用element.attribute()方法获取dom元素的内容,如:dr = driver.find_element_by_
- MySQL启用SSD存储的实例详解有时OS读写慢会降低MySQL服务器的性能,尤其是OS与MySQL使用同一磁盘时。故最好是让MySQL使用
- 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。 作用: 1。二
- 在PHP网站开发中,时常遇到Mysql数据库备份或数据库迁移工作,这时Mysql怎么导入导出数据库中的数据就非常关键,Mysql本身提供了命
- 设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。问题URL的中
- OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算
- 本文实例讲述了PHP+Ajax实现无刷新分页的方法。分享给大家供大家参考,具体如下:注:这里使用到的一些类库在前面文章都能找到源代码,因此为
- 如何更改 pandas dataframe 中两列的位置:把其中的某列移到第一列的位置。原来的 df 是:df = pd.read_csv(
- 本文实例讲述了Python简单实现Base64编码和解码的方法。分享给大家供大家参考,具体如下:Base64编码是一种“防君子不防小人”的编
- 前言Django提供了多种装饰器, 其中login_required可能是经常会使用到的。 这里介绍下四种使用此装饰器的办法。当然, 在使用
- 本文解决问题:批量删除多行txt文本中的内容。思路:1.找出需要删除行的 id(就是需要删除那些行,把这是第几行给记录下来。)2.将原文本内
- 本文实例讲述了Django框架使用富文本编辑器Uedit的方法。分享给大家供大家参考,具体如下:Uedit是百度一款非常好用的富文本编辑器一
- 如果是报名培训班的话,学习的速度可能会更快一些,毕竟是自己花钱了。自学python爬虫方法:首先要掌握一些有关爬虫的基础知识,基本的要知道什
- Golang与python线程详解及简单实例在GO中,开启15个线程,每个线程把全局变量遍历增加100000次,因此预测结果是 15*100