python中Pyqt5使用Qlabel标签播放视频


Posted in Python onApril 22, 2022

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中Pyqt5使用Qlabel标签播放视频

 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_())

视频播放成功显示: 

python中Pyqt5使用Qlabel标签播放视频

注:视频播放没有声音

到此这篇关于python中Pyqt5使用Qlabel实现标签进行视频播放的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
在Python的Django框架中包装视图函数
Jul 20 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
简单了解python代码优化小技巧
Jul 08 Python
python操作excel让工作自动化
Aug 09 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
python em算法的实现
Oct 03 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
Python使用MapReduce进行简单的销售统计
python使用pycharm安装pyqt5以及相关配置
Python使用DFA算法过滤内容敏感词
python游戏开发之pygame实现接球小游戏
Apr 22 #Python
python游戏开发Pygame框架
Apr 22 #Python
python中的random模块和相关函数详解
Apr 22 #Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 #Python
You might like
session在PHP大型web应用中的使用
2011/06/25 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
使用JS动态显示文本
2017/09/09 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
Javascript的this详解
2019/03/23 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
大学生实习自我鉴定
2013/12/11 职场文书
乐观大学生的自我评价
2014/01/10 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
公司节能减排倡议书
2014/05/14 职场文书
小学生常见病防治方案
2014/06/06 职场文书
卖车协议书范例
2014/09/16 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
Nginx快速入门教程
2021/03/31 Servers
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL