python实现图片播放器

  • 零、小序
  • 一、图片播放器介绍
    • 1、功能介绍
    • 2、用到的技术
    • 3、图片播放效果
  • 二、主要代码
    • 1、Python代码
    • 2、代码下载地址

零、小序

Python是一个语法简单的语言,Python的框架却没有那么简单,真想学好Python来做项目并不是一件简单的事情,这里在windows下用PyCharm开发,使用PyQt5来实现了一个小小的图片播放器。

一、图片播放器介绍

1、功能介绍

使用PyQt5这个强大的库来实现界面和图片浏览功能,界面使用QtDesigner来设计并通过PyUIC把Qt设计师绘制的界面转化为Python代码,界面布局主要有QMainWindow和QLabel这另两个空间来实现。该工具支持单张图片的打开和打开文件夹两种功能,图片显示使用QLabel+QPixmap来显示,界面的周边使用QLabel增加了一些动态文字的显示功能。

2、用到的技术

主要使用到PyQt5的信号和槽处理机制、QTimer定时器的使用、Qt设计师的使用、QLabel的使用、QPixmap的使用、QFileDialog打开文件和文件夹的使用等技术,详细使用情况请看代码。Qt设计师的使用可以参考我之前写的一篇文章:https://blog.csdn.net/toby54king/article/details/101383374

3、图片播放效果

下图是操作和效果,为了减小动态图占用空间,录制的动态图做了一些减帧处理,效果看着可能有些不是很好。

二、主要代码

1、Python代码

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ScanPicture.ui'
#
# Created by: PyQt5 UI code generator 5.13.1
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimerimport sys,osclass Ui_MainWindow(object):def __init__(self):# 存储图片vectorself.vector = []self.posTop = 0self.posBottom = 0self.posLeft = 0self.posRight = 0self.index = 0def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(891, 685)font = QtGui.QFont()font.setPointSize(9)MainWindow.setFont(font)self.centralwidget = QtWidgets.QWidget(MainWindow)font = QtGui.QFont()font.setPointSize(15)font.setBold(False)font.setWeight(50)self.centralwidget.setFont(font)self.centralwidget.setObjectName("centralwidget")self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)self.gridLayout.setContentsMargins(0, 0, 0, 0)self.gridLayout.setSpacing(0)self.gridLayout.setObjectName("gridLayout")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setSpacing(0)self.horizontalLayout.setObjectName("horizontalLayout")self.labelLeft = QtWidgets.QLabel(self.centralwidget)self.labelLeft.setMinimumSize(QtCore.QSize(25, 0))self.labelLeft.setMaximumSize(QtCore.QSize(25, 16777215))self.labelLeft.setStyleSheet("background-color: rgb(255, 170, 127);")self.labelLeft.setObjectName("labelLeft")self.horizontalLayout.addWidget(self.labelLeft)self.verticalLayout = QtWidgets.QVBoxLayout()self.verticalLayout.setSpacing(0)self.verticalLayout.setObjectName("verticalLayout")self.labelTop = QtWidgets.QLabel(self.centralwidget)self.labelTop.setMinimumSize(QtCore.QSize(0, 25))self.labelTop.setMaximumSize(QtCore.QSize(16777215, 25))self.labelTop.setStyleSheet("background-color: rgb(255, 255, 127);")self.labelTop.setObjectName("labelTop")self.verticalLayout.addWidget(self.labelTop)self.label = QtWidgets.QLabel(self.centralwidget)self.label.setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(255, 255, 255, 255), stop:0.1 rgba(255, 255, 255, 255), stop:0.2 rgba(255, 176, 176, 167), stop:0.3 rgba(255, 151, 151, 92), stop:0.4 rgba(255, 125, 125, 51), stop:0.5 rgba(255, 76, 76, 205), stop:0.52 rgba(255, 76, 76, 205), stop:0.6 rgba(255, 180, 180, 84), stop:1 rgba(255, 255, 255, 0));")self.label.setAlignment(QtCore.Qt.AlignCenter)self.label.setObjectName("label")self.verticalLayout.addWidget(self.label)self.labelBottom = QtWidgets.QLabel(self.centralwidget)self.labelBottom.setMinimumSize(QtCore.QSize(0, 25))self.labelBottom.setMaximumSize(QtCore.QSize(16777215, 25))self.labelBottom.setStyleSheet("background-color: rgb(255, 255, 127);")self.labelBottom.setObjectName("labelBottom")self.verticalLayout.addWidget(self.labelBottom)self.horizontalLayout.addLayout(self.verticalLayout)self.labelRight = QtWidgets.QLabel(self.centralwidget)self.labelRight.setEnabled(True)self.labelRight.setMinimumSize(QtCore.QSize(25, 0))self.labelRight.setMaximumSize(QtCore.QSize(25, 16777215))self.labelRight.setStyleSheet("background-color: rgb(255, 170, 127);")self.labelRight.setScaledContents(False)self.labelRight.setObjectName("labelRight")self.horizontalLayout.addWidget(self.labelRight)self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 891, 23))self.menubar.setObjectName("menubar")self.menu = QtWidgets.QMenu(self.menubar)self.menu.setObjectName("menu")MainWindow.setMenuBar(self.menubar)self.actionOpenFile = QtWidgets.QAction(MainWindow)self.actionOpenFile.setObjectName("actionOpenFile")self.actionOpenDir = QtWidgets.QAction(MainWindow)self.actionOpenDir.setObjectName("actionOpenDir")self.menu.addAction(self.actionOpenFile)self.menu.addAction(self.actionOpenDir)self.menubar.addAction(self.menu.menuAction())self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)# 初始化信息self.initInfo()#添加信号和槽连接self.actionOpenDir.triggered.connect(self.openPicDir)self.actionOpenFile.triggered.connect(self.openPicFile)self.timerPicture = QTimer()self.timerText = QTimer()self.timerPicture.timeout.connect(self.timerShowPic)self.timerText.timeout.connect(self.timerShowText)self.timerPicture.start(1000)self.timerText.start(500)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "ScanPicture"))self.labelLeft.setText(_translate("MainWindow", "LeftLabe"))self.labelTop.setText(_translate("MainWindow", "Top"))self.label.setText(_translate("MainWindow", "Love"))self.labelBottom.setText(_translate("MainWindow", "Botton Label"))self.labelRight.setText(_translate("MainWindow", "RightLabel"))self.menu.setTitle(_translate("MainWindow", "File"))self.actionOpenFile.setText(_translate("MainWindow", "OpenFile"))self.actionOpenDir.setText(_translate("MainWindow", "OpenDir"))#初始化界面信息def initInfo(self):self.labelLeftText = "爱她就把你的工资交给她,爱她就把你的工资交给她"self.labelRightText = "爱她房产证上就写她的名,爱她房产证上就写她的名"self.labelTopText = "爱人生,爱微笑,一个爱分享的程序猿!欢迎关注!"self.labelBottomText = "xx月xx日即腊月xx是xx女士与xx先生的婚礼欢迎您的参加"# 打开图片目录def openPicDir(self):self.timerPicture.start()dirPic = QFileDialog.getExistingDirectory(None,"OpenDir",".")#print("dirPic:%s"%dirPic)for dir,subdir,files in os.walk(dirPic):#print("files:%s"%files)for file in files:#print("file:%s"%file)splitStr = os.path.splitext(file)[1]#print("splitStr:%s"%splitStr)if splitStr == '.jpg':picPath = os.path.join(dirPic,file)#print("picPath:%s"%picPath)self.vector.append(picPath)# 打开图片文件def openPicFile(self):self.timerPicture.stop() # 当需要单独查看图片时,需要关闭正在循环播放的图片self.vector.clear()filePic = QFileDialog.getOpenFileName(None,"openFile",".","*.jpg *.png *.gif")print("openPicFile--------------")print("filePic:%s"%filePic[0])if len(filePic[0])>0:self.label.setPixmap(QPixmap(filePic[0]))# 循环定时播放文件夹中的图片def timerShowPic(self):print("index=%s"%self.index)#当文件夹中的图片浏览完后从头再次开始播放if self.index == len(self.vector):self.index = 0if len(self.vector) > 0:print("vector_len=%s" %len(self.vector))self.image = QImage(self.vector[self.index])#设置图片缩放保持原来的比例self.scalePic = self.image.scaled(self.label.width(),self.label.height(),Qt.KeepAspectRatio,Qt.SmoothTransformation)self.label.setPixmap(QPixmap(self.scalePic))self.index += 1# 显示文字def timerShowText(self):#当文字加载完后,重置从头加载if self.posTop > len(self.labelTopText):self.posTop = 0if self.posBottom > len(self.labelBottomText):self.posBottom = 0if self.posLeft > len(self.labelLeftText):self.posLeft = 0if self.posRight > len(self.labelRightText):self.posRight = 0self.labelTop.setText(self.labelTopText[0:self.posTop])self.labelBottom.setText(self.labelBottomText[0:self.posBottom])self.labelLeft.setText(self.labelLeftText[0:self.posLeft])self.labelLeft.setWordWrap(True)self.labelRight.setText(self.labelRightText[0:self.posRight])self.labelRight.setWordWrap(True)self.posTop += 1self.posBottom += 1self.posLeft += 1self.posRight += 1if __name__ == "__main__":app = QApplication(sys.argv)MainWindow = QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

2、代码下载地址

为了方便界面设计,使用了Qt设计师,生成的有UI文件,这里没法粘贴,这个工程的代码下载地址在这里:https://download.csdn.net/download/toby54king/12281508

能力有限,如有错误,多多指教!原创不易,点赞鼓励一下吧!

Python实现一个小小的图片播放器,就是这么简单!相关推荐

  1. python如何播放视频_如何用python做一个视频搜索+播放器

    import urllib.request import json import requests import re import tkinter as tk import tkinter.mess ...

  2. QT制作一个图片播放器

    前言:使用qt制作了一个简单的图片播放器,可以播放gif.png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1.点击图片列表中图片进行播放. 2.自动播放,播放的图片的间隔 ...

  3. 视频、音乐播放器大家都听说过,那么图片播放器呢

    原标题:应用Tkinter模块制作一个图片播放器 今天,在看视频的同时,想了一下,既然视频.音乐都有自己的播放器,那么图片呢?是否有自己的播放器呢?既然没有,为什么不做一个呢? 文章目录 原标题:应用 ...

  4. imagePreview接口调用微信自带图片播放器

    2019独角兽企业重金招聘Python工程师标准>>> 在微信浏览器中,出现在网页上的图片通过点按一小段时间,可以调出微信隐藏的图片播放器,在播放器中看图可以随意放大缩小,体验更炫酷 ...

  5. 如何快速做一个HTML5移动播放器

    这段时间公司一直在做一个PC的教育类单页应用,庞大复杂,涉及非常多H5的知识,音频就是其中的一部分.前些天偷台风的闲暇时写了一个移动音乐播放器,作为练手项目(存放在码云).若你觉得该文章对你有帮助,别 ...

  6. 图片播放器的实现1——利用Image2LCD提取图片数据并显示

    以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除. 参考内容 (1)https://xiefor100.blog.csdn.net/article/details/71941527 (2) ...

  7. 播放器图片html,jQuery实现类似视频播放功能的图片播放器插件

    jquery Image Player是一款可以像视频播放一样逐张播放图片的图片播放器jQuery插件.当你需要介绍你的某个产品和项目的时候,这个插件就可以发挥它的强大作用.你可以将产品或项目的各个功 ...

  8. C# -写个可可图片播放器

    C# -写个可可图片播放器 效果 程序分析 资源准备 准备两组图,一组汽车图(5张):一组动物图(5张) 将图片都添加到项目的资源文件中:项目右侧有个Resources.resx文件,点击出现左侧界面 ...

  9. html图片播放器,imgplay-基于canvas的图片序列播放jQuery插件

    imgplay是一款基于HTML5 canvas的图片序列播放jQuery插件.通过该插件可以实现一组图片的轮流播放,你还可以进行暂停.快进.后退操作,并且可以进入全屏模式进行图片观看. 使用方法 使 ...

最新文章

  1. HDU1250(高精度加法)
  2. 了解一下:机器学习性能优化的6个指标
  3. Yocto基本概念及介绍
  4. 为WPF和Silverlight的Grid添加边框线
  5. 关闭或开启memory_target
  6. 谷歌浏览器——请停用以开发者模式运行的扩展程序
  7. 2020-12-15 CPU设计复盘
  8. 数据结构算法 | 单调栈
  9. php分区表,【MYSQL】分区表
  10. 《电子元器件的可靠性》——第1章概述
  11. GCC全过程详解+剖析生成的.o文件[转]
  12. vue组件内数值做watch监听,首次监听不到的问题
  13. 美国大学计算机专业排名 圣地亚哥,U.S.News美国大学计算机专业排名
  14. golang vendor目录
  15. loopback接口介绍
  16. SpringMVC ResponseBody返回字符串带双引号解决
  17. 一个人的格局,往往决定着一生【看世间繁华,品百味人生】
  18. POJ 3255 次短路
  19. win10可以上网但是网路连接显示小地球(无法连接到Internet)
  20. shell 知:ola

热门文章

  1. Ultra-Fast-Lane-Detection-V2最新车道线检测算法
  2. python运行快捷键修改_pycharm快捷键、常用设置、配置管理
  3. 泰克示波器TDS210更换IPS彩色屏幕
  4. 用canvas,javascript制作“坦克大战“小游戏
  5. OPPO R9S root 方法
  6. OpenGL 着色模式 glShadeModel
  7. C语言——星号三角形
  8. 子网掩码 快速计算 .因为要牵扯到二进制的变换
  9. Python 海龟绘制正方形和风轮
  10. 中国电信服务器集采浪潮信息,浪潮存储中标中国电信2020存储集采,驱动5G“云网融合”...