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代码的打包与发布详解
Jul 30 Python
python语言使用技巧分享
May 31 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
Python魔法方法 容器部方法详解
Jan 02 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
Python3监控疫情的完整代码
Feb 20 Python
python实现udp传输图片功能
Mar 20 Python
使用python检查yaml配置文件是否符合要求
Apr 09 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
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
php使用正则验证中文
2016/04/06 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
Python中encode()方法的使用简介
2015/05/18 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
python实现图书管理系统
2018/03/12 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Python字典底层实现原理详解
2019/12/18 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
python 实现aes256加密
2020/11/27 Python
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
2014年上半年工作自我评价
2014/01/18 职场文书
五年级学生评语
2014/04/22 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
庆元旦主持词
2015/07/06 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
vue的项目如何打包上线
2022/04/13 Vue.js
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL