python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
以下文章来源于Charles的皮卡丘 ,作者白露未晞me
Python爬虫、数据分析、网站开发等案例教程视频免费在线观看
https://space.bilibili.com/523606542
这里我们主要利用PyQt5来带大家写个简单的视频播放器。首先,我们来初始化一下视频播放器的窗口:
# 初始化窗口
self.setWindowTitle('视频播放器')
self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'images/icon.png')))
self.setGeometry(300, 50, 810, 600)
self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint)
palette = QPalette()
palette.setColor(QPalette.Background, Qt.gray)
self.setPalette(palette)
其中setWindowTitle函数用于设置窗口标题,而setWindowIcon函数则用于设置窗口图标:
接着,我们来定义一些必要的组件,即视频播放插件:
self.video_widget = QVideoWidget(self)
self.video_widget.setGeometry(QRect(5, 5, 800, 520))
palette = QPalette()
palette.setColor(QPalette.Background, Qt.black)
self.video_widget.setPalette(palette)
self.video_widget.setStyleSheet('background-color:#000000')
self.player = QMediaPlayer(self)
self.player.setVideoOutput(self.video_widget)
self.player.setVolume(50)
和选择视频相关的组件:
# --当前的视频路径
self.video_line_edit = QLineEdit('')
# --选择视频按钮
self.select_video_btn = QPushButton('选择')
播放和暂停按钮(需要注意的是播放和暂停按钮不能同时显示,即默认是显示播放键,隐藏暂停键,按下播放键后播放键按钮隐藏,而暂停键按钮显示,以此类推):
# --播放按钮
self.play_btn = QPushButton(self)
self.play_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/play.png')))
self.play_btn.setIconSize(QSize(25, 25))
self.play_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;border-radius:35px;}''')
self.play_btn.setCursor(QCursor(Qt.PointingHandCursor))
self.play_btn.setToolTip('播放')
self.play_btn.setFlat(True)
# --暂停按钮
self.pause_btn = QPushButton('')
self.pause_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/pause.png')))
self.pause_btn.setIconSize(QSize(25, 25))
self.pause_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;}''')
self.pause_btn.setCursor(QCursor(Qt.PointingHandCursor))
self.pause_btn.setToolTip('暂停')
self.pause_btn.setFlat(True)
self.pause_btn.hide()
播放进度相关的组件:
# --播放进度
self.play_progress_label = QLabel('00:00 / 00: 00')
self.play_progress_slider = QSlider(Qt.Horizontal, self)
self.play_progress_slider.setMinimum(0)
self.play_progress_slider.setSingleStep(1)
self.play_progress_slider.setGeometry(QRect(0, 0, 200, 10))
音量控制相关的组件:
# --音量控制
self.volume_slider = QSlider(Qt.Horizontal)
self.volume_slider.setMinimum(0)
self.volume_slider.setMaximum(100)
self.volume_slider.setValue(50)
self.mute_btn = QPushButton('')
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png')))
self.mute_btn.setIconSize(QSize(25, 25))
self.mute_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;}''')
self.mute_btn.setCursor(QCursor(Qt.PointingHandCursor))
self.mute_btn.setToolTip('禁音')
self.mute_btn.setFlat(True)
self.volume_label = QLabel('50')
然后简单地自动布局一下:
# --布局
v_layout = QVBoxLayout()
v_layout.setSpacing(0)
v_layout.addStretch()
h_layout = QHBoxLayout()
h_layout.setSpacing(15)
h_layout.addWidget(self.video_line_edit, 2, Qt.AlignVCenter | Qt.AlignVCenter)
h_layout.addWidget(self.select_video_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
v_layout.addLayout(h_layout)
h_layout = QHBoxLayout()
h_layout.setSpacing(2)
h_layout.addWidget(self.play_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.pause_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.play_progress_label, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.play_progress_slider, 15, Qt.AlignVCenter | Qt.AlignVCenter)
h_layout.addWidget(self.mute_btn, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.volume_slider, 0, Qt.AlignCenter | Qt.AlignVCenter)
h_layout.addWidget(self.volume_label, 0, Qt.AlignCenter | Qt.AlignVCenter)
v_layout.addLayout(h_layout)
self.setLayout(v_layout)
接着,我们来实现一下各个控件可以触发的功能。首先是播放和暂停功能,这个很简单,代码如下:
'''播放视频'''
def playvideo(self):
if self.player.duration() == 0: return
self.play_btn.hide()
self.pause_btn.show()
self.player.play()
'''暂停视频'''
def pausevideo(self):
if self.player.duration() == 0: return
self.play_btn.show()
self.pause_btn.hide()
self.player.pause()
需要注意的是点击播放和暂停按钮的时候需要同时切换一下按钮的状态(即点击完暂停键需要显示播放键隐藏暂停键,点击完播放键需要显示暂停键隐藏播放键,以实现按键切换形态的效果)。
在播放的过程中,记得实时地修改进度条的显示:
'''播放进度设置'''
def setPlayProgress(self):
_, right = self.play_progress_label.text().split('/')
position = self.player.position() + 1
second = int(position / 1000 % 60)
minute = int(position / 1000 / 60)
left = str(minute).zfill(2) + ':' + str(second).zfill(2)
self.play_progress_label.setText(left + ' /' + right)
self.play_progress_slider.setValue(position)
对了,播放视频之前我们需要打开视频文件,功能实现如下:
'''打开视频文件'''
def openvideo(self):
# 打开并显示视频路径
filepath = QFileDialog.getOpenFileName(self, '请选择视频', '.')
if filepath[0]:
self.video_line_edit.setText(filepath[0])
# 将视频路径初始化进视频播放插件
filepath = self.video_line_edit.text()
if not os.path.exists(filepath): return
fileurl = QUrl.fromLocalFile(filepath)
if fileurl.isValid():
self.player.setMedia(QMediaContent(fileurl))
self.player.setVolume(50)
接着是拖动视频播放进度条的功能:
'''播放进度条按下ing事件'''
def playProgressSliderPressed(self):
if self.player.state() != 0: self.player.pause()
'''播放进度条按下释放事件'''
def playProgressSliderReleased(self):
if self.player.state() != 0:
self.player.setPosition(self.play_progress_slider.value())
self.player.play()
即拖动进度条的过程中暂停播放视频,拖动结束后将视频的播放进度切换到和进度条相对应的位置。
音量控制功能(这个原理和拖动视频播放进度条的实现类似):
'''设置音量'''
def setVolume(self):
value = self.volume_slider.value()
if value:
self.player.setMuted(False)
self.player.setVolume(value)
self.volume_label.setText(str(value))
self.volume_slider.setValue(value)
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png')))
else:
self.player.setMuted(True)
self.volume_label.setText('0')
self.volume_slider.setValue(0)
self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/mute.png')))
最后一个小细节,当视频播放器的窗口大小改变时,我们自适应地修改播放插件的窗口大小:
'''改变窗口大小'''
def resizeEvent(self, event):
size = event.size()
self.video_widget.setGeometry(5, 5, size.width() - 5, size.height() - 80)
python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...相关推荐
- python可以调试吗_调试-有什么好的方法可以使我的Python代码首次运行?
调试-有什么好的方法可以使我的Python代码首次运行? 我的代码中出现了很多错误. 因此,我希望能够在一开始就将它们最小化,或者在执行代码之前看到尽可能多的错误. 这可能吗,如果可以,我该怎么做? ...
- 用QT5做一个视频播放器
作为一个菜鸟有空的时候都会做一些QT小项目拿来练练手,今天做的是一个视频播放器,暂时只实现了本地视频的播放,后续会继续完善实现网络播放功能. (1)因为图片都是自己网上随便找的,做的界面有点丑,后续有 ...
- 手把手教你用python抢票_又没抢到票?手把手教你用python抢票回家过年…
原标题:又没抢到票?手把手教你用python抢票回家过年- 最近朋友圈刷屏:我又没抢到票!哭! 憋急,教程在此,有人愿意尝试吗? 先看看如何快速查看剩余火车票? 作者 protream 原文:http ...
- python抓取内存中的网页_『爬虫四步走』手把手教你使用Python抓取并存储网页数据!...
爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...
- java使用xml存储数据_『爬虫四步走』手把手教你使用Python抓取并存储网页数据!
菜鸟学Python 以下文章来源于早起Python ,作者刘早起 爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据 ...
- java使用xml存储数据_「爬虫四步走」手把手教你使用Python抓取并存储网页数据
爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...
- python抓取pc端数据_「爬虫四步走」手把手教你使用Python抓取并存储网页数据!...
爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...
- python布尔测试对象_面试题十九期-测试开发面试题之python系列-这个中~
坚持梦想 就算所有人都不支持你.这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾. 测试开发python系列面试题 01 单选题 1.下列哪个语句在P ...
- python商城源码_腾讯大佬用了12小时讲完的Python,整整400集,拿走不谢
Python在近几年越来越受追捧,很多童鞋或者职场小伙伴想要提升技能-学习Python. 这是非常好的事情,但问题在于很多人不知道学Python做什么,所以什么零碎细末.艰难晦 涩.长篇大论的都去看, ...
- python vb 哪个好学_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...
最新文章
- 大厂也在用的 6种 数据脱敏方案,别做泄密内鬼
- KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力
- java 并行 执行进度_关于java:Java8流的顺序执行和并行执行产生不同的结果?
- Visual Studio 2019 + MFC——配置MFC
- 进程和线程基础知识(已经是最详细的啦)
- 【专升本计算机】专升本计算机期末考试复习题(C卷附答案)
- 你应该知道的 Linux 命令行技巧
- 仿苹果涂鸦软件_ipad平板电脑有哪些绘画软件?
- 开发人员的U盘,最好是128G
- 结构体中的map尽量使用指针,否则不要使用memset
- 角点 python实现_100行代码,带你玩转OpenCV-Python基础API
- 数学分析学习笔记(陈纪修)
- 符号函数的作用及Matlab中的基本用法
- 联想e470c怎么修改电脑语言,联想电脑语言切换不了怎么办
- 计算机课搞事情检讨,【热门】作弊检讨书范文10篇
- 传奇服是怎样架设的,怎样搭建一个属于自己的游戏服 10分钟学会游戏架设 玩转云服务器搭建游戏
- 惊!一文看懂Java NIO读写文件
- SourceTree + Gerrit
- 非平衡电桥电阻计算_【2019年整理】用非平衡电桥测量电阻
- NumberUtils简单介绍和具体实例