本文旨在介绍如何使用PyQt5制作简易的视频播放器

ps:有些网友也许会遇到只能播放avi格式视频,而mp4等格式无法播放的问题(DirectShowPlayerService::doRender: Unresolved error code 0x8040266 (IDisspatch error #102)),这需要下载一个解码器,可参考这篇博客。

Version 1:最简易播放器

直接选用QT自带播放器和组件即可~

from PyQt5.QtWidgets import QApplication, QFileDialog
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidgetif __name__ == '__main__':app = QApplication([])player = QMediaPlayer()wgt_video = QVideoWidget()  # 视频显示的widgetwgt_video.show()player.setVideoOutput(wgt_video)  # 视频输出的widgetplayer.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))  # 选取视频文件player.play()app.exec_()

当然,也可以直接在程序里指定视频目录,只需要如下替换一下语句即可:

from PyQt5.Qt import QUrl# player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))  # 选取视频文件
player.setMedia(QMediaContent(QUrl.fromLocalFile(r'C:\Users\lenovo\Desktop\crawler.mp4')))

Version 2:自制播放器界面

这里使用Qt Designer给我们简易的播放器加一个界面,提供选择视频的按钮~

首先,我们需要在Qt Designer中设计好我们的简易界面布局:

这里注意,视频播放所用的Widget在左侧工具箱中并没有直接给出,需要自行添加,可以参考这里,也可以参考下面的GIF演示。(Widget提升设置那里,提升的类名称为QVideoWidget,头文件为PyQt5.QtMultimediaWidgets)

下面给出源码,注意btn_select和wgt_player是在designer中给两个控件起的名称,‘video_1.ui’是上面designer保存后的文件~

from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtWidgets import QFileDialog, QApplication
from PyQt5 import uicclass videoPlayer:def __init__(self):self.ui = uic.loadUi('video_1.ui')  # 加载designer设计的ui程序self.player = QMediaPlayer()self.player.setVideoOutput(self.ui.wgt_player)self.ui.btn_select.clicked.connect(self.openVideoFile)# 打开视频文件并播放def openVideoFile(self):self.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))self.player.play()if __name__ == "__main__":app = QApplication([])myPlayer = videoPlayer()myPlayer.ui.show()app.exec()

Version 3:加入进度控件

下面给我们的播放器加入进度控件,可以对视频进行“播放/暂停”、“进度条显示与控制”、“剩余时间显示”等功能~
designer设计如下:

实现效果如下:(play/pause按钮可以播放暂停视频,进度条可以改变视频进度,并有剩余时间显示)

这其中主要涉及一些控件的信号/信号槽的简单使用,源码如下:

from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtWidgets import QFileDialog, QApplication
from PyQt5 import uicclass videoPlayer:def __init__(self):# 初始化self.ui = uic.loadUi('video_1.ui')  # 加载designer设计的ui程序# 播放器self.player = QMediaPlayer()self.player.setVideoOutput(self.ui.wgt_player)# 按钮self.ui.btn_select.clicked.connect(self.open)self.ui.btn_play_pause.clicked.connect(self.playPause)# 进度条self.player.durationChanged.connect(self.getDuration)self.player.positionChanged.connect(self.getPosition)self.ui.sld_duration.sliderMoved.connect(self.updatePosition)# 打开视频文件def open(self):self.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))self.player.play()# 播放视频def playPause(self):if self.player.state()==1:self.player.pause()else:self.player.play()# 视频总时长获取def getDuration(self, d):'''d是获取到的视频总时长(ms)'''self.ui.sld_duration.setRange(0, d)self.ui.sld_duration.setEnabled(True)self.displayTime(d)# 视频实时位置获取def getPosition(self, p):self.ui.sld_duration.setValue(p)self.displayTime(self.ui.sld_duration.maximum()-p)# 显示剩余时间def displayTime(self, ms):minutes = int(ms/60000)seconds = int((ms-minutes*60000)/1000)self.ui.lab_duration.setText('{}:{}'.format(minutes, seconds))# 用进度条更新视频位置def updatePosition(self, v):self.player.setPosition(v)self.displayTime(self.ui.sld_duration.maximum()-v)if __name__ == "__main__":app = QApplication([])myPlayer = videoPlayer()myPlayer.ui.show()app.exec()


Version 4:外观设计

完成基本功能后,下面进行一些面子工程,比如:设置窗口图标和标题、设置按钮图标、布局设计、设置背景等。这些功能可以靠编程实现,也可以在Qt Designer中完成~

比如,使用QSS给按钮添加图标:

 self.ui.btn_select.setStyleSheet('QPushButton{background:url(../icon/hide.png) no-repeat center}') # StyleSheet使用CSS语法self.ui.btn_play_pause.setStyleSheet('QPushButton{background:url(../icon/play.png) no-repeat center}')

比如,使用QIcon给窗口添加图标:

app.setWindowIcon(QIcon('../icon/bupt.jpg'))

比如,使用QPainter给窗口加背景图:

    def paintEvent(self, event):painter = QPainter(self)painter.drawPixmap(self.ui.rect(), QPixmap('../icon/bg_1.jpg'))

比如,使用Designer中的QSS更改滑动条、标签外观等
 ps:选中控件 — 右键 — 改变样式表…




最后,给出效果展示以及源码~

from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtWidgets import QFileDialog, QApplication, QWidget, QDialog
from PyQt5.QtGui import QIcon, QColor, QPainter, QPixmap
from PyQt5 import uicclass videoPlayer(QWidget):def __init__(self):super().__init__()self.ui = uic.loadUi('video_1.ui', baseinstance=self)  # 加载designer设计的ui程序# 播放器self.player = QMediaPlayer()self.player.setVideoOutput(self.ui.wgt_player)# 按钮self.ui.btn_select.clicked.connect(self.open)self.ui.btn_play_pause.clicked.connect(self.playPause)# 进度条self.player.durationChanged.connect(self.getDuration)self.player.positionChanged.connect(self.getPosition)self.ui.sld_duration.sliderMoved.connect(self.updatePosition)# 资源图片'''self.ui.btn_select.setIcon(QIcon('../icon/hide.png'))self.ui.btn_play_pause.setIcon(QIcon('../icon/play.png'))'''# self.ui.wgt_player.setStyleSheet("QWidget { background-color: QColor(0,0,0) }" )self.ui.btn_select.setStyleSheet('QPushButton{background:url(../icon/hide.png) no-repeat center}') # StyleSheet使用CSS语法self.ui.btn_play_pause.setStyleSheet('QPushButton{background:url(../icon/play.png) no-repeat center}')# 打开视频文件def open(self):self.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))self.player.play()self.ui.btn_play_pause.setStyleSheet('QPushButton{background:url(../icon/pause.png) no-repeat center}')# 播放视频def playPause(self):if self.player.state()==1:self.player.pause()self.ui.btn_play_pause.setStyleSheet('QPushButton{background:url(../icon/play.png) no-repeat center}')elif self.player.state()==2 or self.ui.sld_duration.value()!=0:self.player.play()self.ui.btn_play_pause.setStyleSheet('QPushButton{background:url(../icon/pause.png) no-repeat center}')# 视频总时长获取def getDuration(self, d):'''d是获取到的视频总时长(ms)'''self.ui.sld_duration.setRange(0, d)self.ui.sld_duration.setEnabled(True)self.displayTime(d)# 视频实时位置获取def getPosition(self, p):self.ui.sld_duration.setValue(p)self.displayTime(self.ui.sld_duration.maximum()-p)# 显示剩余时间def displayTime(self, ms):minutes = int(ms/60000)seconds = int((ms-minutes*60000)/1000)self.ui.lab_duration.setText('{}:{}'.format(minutes, seconds))if ms==0:self.ui.btn_play_pause.setStyleSheet('QPushButton{background:url(../icon/play.png) no-repeat center}')# 用进度条更新视频位置def updatePosition(self, v):self.player.setPosition(v)self.displayTime(self.ui.sld_duration.maximum()-v)# 自定义paintEvent,绘制背景图def paintEvent(self, event):painter = QPainter(self)painter.drawPixmap(self.ui.rect(), QPixmap('../icon/bg_1.jpg'))if __name__ == "__main__":app = QApplication([])app.setWindowIcon(QIcon('../icon/bupt.jpg'))myPlayer = videoPlayer()myPlayer.ui.show()app.exec()

PyQt5:简易视频播放器相关推荐

  1. java视频播放器制作_java创建简易视频播放器

    java创建简易视频播放器 发布时间:2020-09-23 04:28:09 来源:脚本之家 阅读:98 作者:南柯一梦xihe 最近有个多媒体的作业,要求使用visualC++和OpenCV编写一个 ...

  2. 视频播放页php,html jquery简易视频播放器

    html jquery js 简易视频播放器 直接上代码:html> Document #durationbar{ width: 500px; height: 20px; } #duration ...

  3. C语言基于GTK+Libvlc实现的简易视频播放器(二)

    简易视频播放器-全屏播放 一.课程说明 上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显示视频播放进度,但即使作为一个视频播放器,只有这些 ...

  4. 【基于QMediaPlayer的简易视频播放器】— 3、结合QSlider实现播放进度控制和音量控制

    基于QMediaPlayer的简易视频播放器 1.创建基本布局 2.QMediaPlayer的基本使用 3.结合QSlider实现播放进度控制和音量控制 4.重载QSlider鼠标响应事件,实现单击跳 ...

  5. Android的媒体播放器——简易视频播放器(详解)

    一.案例效果 二.主界面的设计与功能 2.1 案例效果 2.2 布局界面 activity_main.xml 参考代码: <?xml version="1.0" encodi ...

  6. 【Java】简易视频播放器

    [效果图] [功能] 1.当窗口获取焦点后,按空格暂停/播放 2.原速播放键.暂停/播放键.倍速播放键(最高3倍速,每次递增0.5) 3.进度条可点击选择播放位置 4.时间显示.播放速度显示 [项目与 ...

  7. PyQt5 简单视频播放器

    文章目录 1.主要组件 2.功能代码 3.功能展示 4.如果播放不了 1.主要组件 QVideoWidget:这个类主要用作播放视频的控件 QMediaPlayer :实现媒体播放的类 2.功能代码 ...

  8. PyQt5 实现视频播放器

    已经更新了详细的实现过程PyQt5 实现视频播放器(二) ,详细版本 ,适合新手入门,并附上完整示例代码. Qt5 比qt4 有了很多新的功能,今天实现一个小的视频播放器的demo.实现的时候在网上发 ...

  9. 视频播放器+android,简易视频播放器

    NetConnection 对象 0002 var netConnection:NetConnection=new NetConnection ; 0003 /*如果连接到没有使用服务器的 priva ...

  10. 【Harmony OS】【ArkUI】ets开发 简易视频播放器

    前言:这一次我们来使用ets的Swiper组件.List组件和Video组件制作一个简易的视频播放器.本篇是以HarmonyOS官网的codelab简易视频播放器(eTS)为基础进行编写.本篇最主要的 ...

最新文章

  1. hadoop jar包_快速搭建Hadoop-Hive-Zoopkeeper-Sqoop环境进入Sqoop学习环境
  2. [html] 如何实现多行文字梯形排版?
  3. android点滴27:R文件无法加载 R cannot be resolved to a v...
  4. 没有UITableViewController的UIRefreshControl
  5. C++读xml 文件信息
  6. Java字符串的字符进行排序
  7. win10关闭端口占用
  8. excel 进行二叉树_常见的Excel模型有哪几种?
  9. 题目 1035: [编程入门]自定义函数之字符类型统计
  10. 夜神模拟器安装激活面具magisk教程
  11. 日本語 IME输入法(Microsoft 输入法)切换问题
  12. DDR的VTT电源应用及其优化
  13. ORB特征和FAST关键点 笔记
  14. 【c语言】两个队列实现一个栈
  15. 2014年中款MacBook Pro 更换CPU散热硅脂再战5年
  16. python动画篮球大小_篮球比赛动画直播数据api接口示例
  17. 计算机与网络安全经历了几个阶段,网络信息安全知识:根据互联网的发展阶段,互联网治理分为三个层面,即结构层面、功能层面、意识层面。确立网络规范属于互联网意识层面的治理。()...
  18. 魏小亮:如何选择硅谷的IT公司
  19. KubeSphere 社区双周报 | KubeKey v3.0.2 发布 | 2022-11-24
  20. 每日站立会议个人博客(冲刺周)-Saturday

热门文章

  1. VIJOS 1321 魔塔
  2. 「诺亚」升级|进阶主动防御,勒索病毒持续免疫
  3. 2021-05-29-PCB学习重点笔记之二,画原理图
  4. 计算机游戏的书推荐,十大耐玩的电脑单机游戏排行,经典单机游戏推荐
  5. Android如何获取第三方app的控件id
  6. 一台电脑内外网同时上网route配置方法
  7. python神经网络算法pdf_Python与机器学习实战 决策树、集成学习、支持向量机与神经网络算法详解及编程实现.pdf...
  8. Maven安装教程以及IDEA配置详解(IDEA版)
  9. 计算机科学导论笔记(七)
  10. 金格签章使用时碰到的奇葩问题解决