【简便的PyQt5】制作一个极具特色的视频播放器

写在前面

效果展示

开源代码

loadInputVideo.py

demo.py


写在前面

  实现了以下功能 :

❤  PyQt5本地上传视频

❤  PyQt5配合OpenCv播放所有类型的视频

❤  PyQt5标签里文本居中

        ❤  PyQt5标签里文本重写

        ❤  视频可多次上传播放

效果展示

开源代码

loadInputVideo.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'loadInputVideo.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(872, 638)MainWindow.setStyleSheet("background-color:black;")self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(280, 550, 60, 60))self.pushButton.setMinimumSize(QtCore.QSize(60, 60))self.pushButton.setMaximumSize(QtCore.QSize(60, 60))self.pushButton.setStyleSheet("font: 11pt \"楷体\";\n""background-color:black;\n"
"color:red;\n"
"border-radius:30px;\n"
"border:2px groove blue;\n"
"border-style:outset;\n"
"")self.pushButton.setObjectName("pushButton")self.label_4 = QtWidgets.QLabel(self.centralwidget)self.label_4.setGeometry(QtCore.QRect(30, 40, 800, 450))self.label_4.setMaximumSize(QtCore.QSize(905, 650))self.label_4.setStyleSheet("color:red;\n"
"border-width:1px;\n"
"border-style:solid;\n"
"border-color:red;\n"
"background-color:black;\n"
"font: 18pt \"华文行楷\";")self.label_4.setObjectName("label_4")self.label_8 = QtWidgets.QLabel(self.centralwidget)self.label_8.setGeometry(QtCore.QRect(30, 500, 801, 41))font = QtGui.QFont()font.setFamily("楷体")font.setPointSize(13)font.setBold(False)font.setItalic(False)font.setWeight(50)self.label_8.setFont(font)self.label_8.setStyleSheet("font: 13pt \"楷体\";\n"
"color:red;\n"
"border-width:1px;\n"
"border-style:solid;\n"
"border-color:red;\n"
"background-color:black;")self.label_8.setText("")self.label_8.setObjectName("label_8")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(500, 550, 60, 60))self.pushButton_2.setMinimumSize(QtCore.QSize(60, 60))self.pushButton_2.setMaximumSize(QtCore.QSize(60, 60))self.pushButton_2.setStyleSheet("font: 11pt \"楷体\";\n"
"background-color:black;\n"
"color:red;\n"
"border-radius:30px;\n"
"border:2px groove blue;\n"
"border-style:outset;\n"
"text-align:centet;")self.pushButton_2.setObjectName("pushButton_2")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 872, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "Load"))self.label_4.setText(_translate("MainWindow", "  Waiting for video..."))self.pushButton_2.setText(_translate("MainWindow", "Play"))

demo.py

import cv2
import shutil
import time
from scipy import signal
from PIL import Image
import matplotlib.pyplot as plt
import numpy as npimport sys
import osfrom GuiData.loadInputVideo import Ui_MainWindow as playVideofrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qtclass playVideoWindow(QtWidgets.QMainWindow, playVideo):def __init__(self):super(playVideoWindow, self).__init__()self.setupUi(self)self.cap = []self.videoName = ''# 居中self.label_8.setAlignment(Qt.AlignCenter)self.reSet_label('please load video...')self.timer_camera = QtCore.QTimer()self.timer_camera.setTimerType(Qt.PreciseTimer)self.pushButton.clicked.connect(self.load_video)self.pushButton_2.clicked.connect(self.play_video)def load_video(self):""" Slot function to start the progamme"""self.videoName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open", "", "*.MOV;;*.avi;;*.mp4;;All Files(*)")self.label_4.repaint()self.label_4.setText('It is ready...')self.label_4.repaint()self.reSet_label('please click play button')def play_video(self):if self.videoName != "":self.cap = cv2.VideoCapture(self.videoName)self.timer_camera.start(1)self.timer_camera.timeout.connect(self.openFrame)def openFrame(self):""" Slot function to capture frame and process it"""if (self.cap.isOpened()):self.reSet_label('playing...')ret, self.frame = self.cap.read()if ret:frame = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)height, width, bytesPerComponent = frame.shapebytesPerLine = bytesPerComponent * widthq_image = QtGui.QImage(frame.data, width, height, bytesPerLine,QtGui.QImage.Format_RGB888).scaled(self.label_4.width(), self.label_4.height())self.label_4.setPixmap(QtGui.QPixmap.fromImage(q_image))else:self.reSet_label('over!')self.label_4.repaint()self.label_4.setText('Waiting for video...')self.label_4.repaint()self.cap.release()self.timer_camera.stop()def reSet_label(self, text):self.label_8.repaint()self.label_8.setText(text)self.label_8.repaint()# 使用案例
if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)contorller = playVideoWindow()contorller.show()sys.exit(app.exec_())

完毕!

如果觉得有帮助,麻烦点个赞+收藏喔!

【简便的PyQt5】制作一个极具特色的视频播放器相关推荐

  1. Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI

    现在NBA联赛也进行到半决赛了,我们怎么样才能以更快的方法获取NBA的数据呢?这里我们就自己来做一个数据播报的程序 文章目录 制作NBA数据爬虫 捋顺思路 编写代码 NBAReporter.py NB ...

  2. dnf跨几服务器比较稳定,DNF极具特色的几个跨区,跨6知名度最高,这个跨区打团不用挤频道...

    原标题:DNF极具特色的几个跨区,跨6知名度最高,这个跨区打团不用挤频道 地下城国服正式公测到现在已经有了十个年头,而今年也将迎来它的第十一个生日,这款游戏在公测时就吸引了很多的玩家,也是因此开放了非 ...

  3. PyQt5制作一个爬虫小工具,爬取雪球网上市公司的财务数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于可以叫我才哥 ,作者:可以叫我才哥 最近有朋友需要帮忙写个爬虫脚本,爬取雪球网一些上 ...

  4. PyQt5制作一个爬虫小工具,获取某网上市公司的财务数据可视化

    最近有朋友需要帮忙写个爬虫脚本,爬取雪球网一些上市公司的财务数据.盆友希望可以根据他自己的选择进行自由的抓取,所以简单给一份脚本交给盆友,盆友还需要自己搭建python环境,更需要去熟悉一些参数修改的 ...

  5. PyQt5制作一个简单的登录界面

    最近在学习GUI设计,分享做的一些小项目. 这篇文我们讲一下如何制作一个简单的登录界面. 目录 一.效果图 二.简述制作过程: 三.源码及材料: 1.源码: 2.图片素材: 一.效果图 如下: 二.简 ...

  6. 阿里云视频云全景创新峰会——视频云,一个极具想象力的赛道

    7月10日,"Imagine"--2021阿里云视频云全景创新峰会暨全球视频云创新挑战赛决赛颁奖典礼在北京举办.本次峰会由阿里云联合Intel主办,与优酷战略技术合作,天池平台及阿 ...

  7. [h5]一个基于HTML5实现的视频播放器代码详解

    什么是 HTML5? HTML5 是最新的 HTML 标准. HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件. HTML5 拥有新的语义.图形以及多媒体元素. HTML5 提供 ...

  8. 一个有节操的Android视频播放器JieCaoVideoPlayer

    特别适合懒人的视频播放器,通常遇到一个视频需要播放的时候,犯愁,自己写的丑,还要花费大量时间实现暂停,全屏,快进,声音大小手势调节等,还有拖动操作,有没有一款神奇可以只放URI地址直接播放呢,事实上还 ...

  9. python 开发工具_一个极具意义的 Python 前端开发工具

    点击上方   编程学习者社区,选择 创建星标 回复关键字 资源  获取编程资源 Python作为胶水语言,真的是无所不能.这不,最近又出现一个基于Python3,目标是替代JavaScript的前端开 ...

最新文章

  1. Golang slice原理
  2. Python 根据地址获取经纬度及求距离
  3. 如何在 ASP.NET MVC 中集成 AngularJS(3)
  4. java基础——“”equals“”与 “”==“” 的区别
  5. Centos7重装系统保留数据(仅限于光盘和ISO镜像形式)
  6. python把字符串3des加密_Python干货之六大密码学编程库
  7. Python空间数据处理环境搭
  8. silverlight安装后仍提示未安装_CAD提示“许可管理器不起作用或未正确安装”?来,我来教你方法...
  9. 新技能 get —— 如何校验 md5(windows)
  10. 进程池和线程池,协程,IO多路复用
  11. PHP-FPM 设置多pool、配置文件重写
  12. 洛谷P4074 [WC2013]糖果公园(莫队)
  13. 记自己的第一个完整的java web项目
  14. python转txt到xml并编译为exe
  15. 346雷达有多少tr组件_S波段+C波段,我军346舰载雷达独具匠心,堪称神来之笔!...
  16. IDEA添加gitlab仓库并上传代码(无需使用任何git指令),报错Ask a project Owner or Maintainer to create a default branch解决方案
  17. 基于just work的LE legacy pairing过程
  18. mybatis报错:parameter ' ' not fount.Available parameters are [0, 1, param1, param2]
  19. 星际争霸2免修改器修改绝对一劳永逸
  20. nao机器人接力比赛

热门文章

  1. 远程桌面系统管理员已经限制你登录的计算机,远程桌面由于帐户限制你无法登录问题...
  2. 【手把手】分布式定时任务调度解析之Elastic-Job
  3. 骚话--大部分来源于抖音评论
  4. phpmyadmin批量导出导入的方法步骤
  5. proteus里面没有stm32怎么办_头疼!换新电脑了,里面没有个税扣缴客户端数据怎么办?会计小刘这样机智解决!...
  6. 收藏!流式细胞术操作重点及注意事项!
  7. 基于RBF网络的信任值预测算法matlab仿真实现
  8. 用友U8采购暂估案例教程2单到回冲
  9. vscode-journal:vscode中写日记/便签/提醒,配合nutstore与安卓、ios同步
  10. HarmonyOS(鸿蒙)运动手表—从零实现投骰子小游戏