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 实现文件的递归拷贝实现代码
Aug 02 Python
python BeautifulSoup使用方法详解
Nov 21 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
python实现图书管理系统
Mar 12 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
Pycharm配置远程调试的方法步骤
Dec 17 Python
使用Python将Mysql的查询数据导出到文件的方法
Feb 25 Python
python 数据分析实现长宽格式的转换
May 18 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
python super()函数的基本使用
Sep 10 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
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
原生js实现日期联动
2015/01/12 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
python学生信息管理系统
2018/03/13 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
劳动工资科岗位职责范本
2014/03/02 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
使用Python获取字典键对应值的方法
2022/04/26 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang
5个实用的JavaScript新特性
2022/06/16 Javascript