Python实现一个小小的图片播放器,就是这么简单!
python實現(xiàn)圖片播放器
- 零、小序
- 一、圖片播放器介紹
- 1、功能介紹
- 2、用到的技術
- 3、圖片播放效果
- 二、主要代碼
- 1、Python代碼
- 2、代碼下載地址
零、小序
Python是一個語法簡單的語言,Python的框架卻沒有那么簡單,真想學好Python來做項目并不是一件簡單的事情,這里在windows下用PyCharm開發(fā),使用PyQt5來實現(xiàn)了一個小小的圖片播放器。
一、圖片播放器介紹
1、功能介紹
使用PyQt5這個強大的庫來實現(xiàn)界面和圖片瀏覽功能,界面使用QtDesigner來設計并通過PyUIC把Qt設計師繪制的界面轉(zhuǎn)化為Python代碼,界面布局主要有QMainWindow和QLabel這另兩個空間來實現(xiàn)。該工具支持單張圖片的打開和打開文件夾兩種功能,圖片顯示使用QLabel+QPixmap來顯示,界面的周邊使用QLabel增加了一些動態(tài)文字的顯示功能。
2、用到的技術
主要使用到PyQt5的信號和槽處理機制、QTimer定時器的使用、Qt設計師的使用、QLabel的使用、QPixmap的使用、QFileDialog打開文件和文件夾的使用等技術,詳細使用情況請看代碼。Qt設計師的使用可以參考我之前寫的一篇文章:https://blog.csdn.net/toby54king/article/details/101383374
3、圖片播放效果
下圖是操作和效果,為了減小動態(tài)圖占用空間,錄制的動態(tài)圖做了一些減幀處理,效果看著可能有些不是很好。
二、主要代碼
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 = "愛她房產(chǎn)證上就寫她的名,愛她房產(chǎn)證上就寫她的名"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() # 當需要單獨查看圖片時,需要關閉正在循環(huán)播放的圖片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]))# 循環(huán)定時播放文件夾中的圖片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
能力有限,如有錯誤,多多指教!原創(chuàng)不易,點贊鼓勵一下吧!
總結(jié)
以上是生活随笔為你收集整理的Python实现一个小小的图片播放器,就是这么简单!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: li指令 汇编_RISC-V平台的汇编指
- 下一篇: jacob使用入门