Pyqt5:使用Qlabel标签进行视频播放

目录

一、简介

二、基本用法

2.1 QLabel控件   

2.2 QLabel常用的信号(事件)

三、QLabel播放视频

 3.1 QTimer

3.2 代码 


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()
        self.result_label.setText("按下start播放视频")

    # 所有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)
        self.result_label.setText("正在播放")

    def Btn_Stop(self):
        # self.cap.release()
        self.timer_camera.stop()
        self.result_label.setText("停止播放,按下start再次播放")

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

视频播放成功显示: 

注:视频播放没有声音

您好,我可以回答您的问题。要实现多个视频的同步播放,您可以使用QMediaPlayer类,这是PyQt5中用于处理多媒体的类之一。您可以创建多个QMediaPlayer对象,每个对象分别加载不同的视频文件,并使用QTimer类来控制它们的同步播放。具体实现步骤可参考以下代码示例: ``` python from PyQt5.QtCore import Qt, QTimer from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QSlider, QLabel, QPushButton class MultiVideoPlayer(QWidget): def __init__(self, video_files): super().__init__() # 创建多个QMediaPlayer对象 self.media_players = [] for video_file in video_files: media_player = QMediaPlayer(self) media_player.setMedia(QMediaContent(video_file)) media_player.stateChanged.connect(self.onStateChanged) self.media_players.append(media_player) # 设置布局 layout = QVBoxLayout(self) video_layout = QHBoxLayout() for media_player in self.media_players: video_widget = media_player.videoOutput().widget() video_layout.addWidget(video_widget) layout.addLayout(video_layout) # 设置播放控制按钮 control_layout = QHBoxLayout() self.play_button = QPushButton("Play", self) self.play_button.clicked.connect(self.onPlayClicked) control_layout.addWidget(self.play_button) self.pause_button = QPushButton("Pause", self) self.pause_button.clicked.connect(self.onPauseClicked) control_layout.addWidget(self.pause_button) layout.addLayout(control_layout) # 设置一个QTimer对象用于同步播放 self.timer = QTimer(self) self.timer.timeout.connect(self.onTimer) self.timer.start(10) def onStateChanged(self, state): if state == QMediaPlayer.State.EndOfMedia: # 播放结束后重新从头播放 for media_player in self.media_players: media_player.setPosition(0) media_player.play() def onPlayClicked(self): for media_player in self.media_players: media_player.play() def onPauseClicked(self): for media_player in self.media_players: media_player.pause() def onTimer(self): # 获取当前播放的位置 positions = [media_player.position() for media_player in self.media_players] max_position = max(positions) # 设置所有播放器的位置为最大位置,以实现同步播放 for media_player in self.media_players: media_player.setPosition(max_position) if __name__ == '__main__': import sys app = QApplication(sys.argv) video_files = ["video1.mp4", "video2.mp4", "video3.mp4"] player = MultiVideoPlayer(video_files) main_window = QMainWindow() main_window.setCentralWidget(player) main_window.show() sys.exit(app.exec_()) ``` 该示例代码使用PyQt5中的QVideoWidget类,可以将视频呈现为可视化控件。在onStateChanged()函数中,当一个视频播放到结尾时,代码将重新从头开始播放。在onPlayClicked()和onPauseClicked()函数中,代码控制所有QMediaPlayer对象一起播放或暂停。在onTimer()函数中,代码获取所有QMediaPlayer对象当前的播放位置,并将所有对象的位置设置为最大位置,以实现同步播放
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧锦程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值