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 18 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
详解python配置虚拟环境
Apr 08 Python
python写入文件自动换行问题的方法
Jul 05 Python
python 日志 logging模块详细解析
Mar 31 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
python3 sqlite3限制条件查询的操作
Apr 07 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 第二节 数据类型之转换
2012/04/28 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
javascript实现前端分页功能
2020/11/26 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python语言快速上手学习方法
2018/12/14 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
python 等差数列末项计算方式
2020/05/03 Python
荷兰手表网站:Watch2Day
2018/07/02 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
商得四方公司面试题(gid+)
2014/04/30 面试题
留学推荐信写作指南
2014/01/25 职场文书
村党支部公开承诺书
2014/05/29 职场文书
物业工程部岗位职责
2015/02/11 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL