动画播放 QMovie
QMovie用于播放无声音的静态动画,例如 gif文件它在 PySide6Gui模块中,需要用QLabel的 setMovie(QMovie)方法与 QLabel 相关联来播放动画。
用QMovie类创建播放动画的实例对象的方法如下,其中 parent 是继承自QObiect的实例对象
可以用文件名或指向图形动画的 QIODevice 设备来指定动画源;
format 指定动画来源的格式取值类型是QByteArray或bytes,例如 b’gif’b’webp’如果不指定格式系统会自行选择合适的格式
from PySide6.QtGui import QMovie
QMovie(device: PySide6.QtCore.QIODevice,format: Union[PySide6.QtCore.QByteArray,bytes]= Default(QByteArray),parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
QMovie(fileName: str,format: Union[PySide6.QtCore.QByteArray,bytes]= Default(QByteArray),parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
QMovie(parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
QMovie的常用方法
QMovie 的常用方法如表所示,主要方法介绍如下
-
用setFileName(fileName: str)或 setDevice(device: QIODevice)方法设置动画源;
- 用isValid()方法获取动画源是否有效。
-
用setFormat(format;Union[QByteArray,bytes])方法设置动画源的格式,例如setFormat(b’gif’)。
-
用start()方法开始播放动画
- 用stop()方法停止播放
- 用pause(True)方法暂停播放;用pause(False)方法继续播放;
-
用setSpeed(percentSpeed;int)方法设置播放速度,参数是正常播放速度的百分比值,例如 setSpeed(200)表示播放速度是原播放速度的2倍。
-
用setCacheMode(QMovieCacheMode)方法设置播放时是否进行缓存参数可以取QMovie.CacheNone或 QMovie.CacheAll.
-
用jumpToFrame(int)方法可以跳转到指定的帧;
- 用jumpToNextFrame()方法跳转到下一帧;
- 当跳转到所需要的帧后,用currentImage()方法或currentPixmap()方法可以获取帧的图像
-
用state()方法可以获得当前的播放状态,播放状态有:
- QMovie.NoRunning
- QMovie,Paused
- QMove.Running
-
用lastErrorString()方法取最近出错的信息,该信息可读;
- 用lastError()方法获取出错信息,返回值是QImageReader.ImageReaderError 的枚举值可取以下值,分别对应值0~4:
- QImageReader.UnknownError
- QlmageReader.FilenotFoundError
- QlmageReader.DeviceError
- QImageReader.UnsupportedFormatError
- QImageReader.InvalidDataError
- 用lastError()方法获取出错信息,返回值是QImageReader.ImageReaderError 的枚举值可取以下值,分别对应值0~4:
setFileName(fileName: str) | 设置动画文件 |
---|---|
fileName() | 获取动画文件名 |
setDevice(device: QIODevice) | 设置设备 |
device() | 获取设备QIODevice |
setFormat(format: Union[QByteArray,bytes]) | 设置动画格式 |
format() | 获取动画格式QByteArray |
[static]supportedFormats() | 获取支持的格式List[QByteArray] |
setScaledSize(QSize) | 设置尺寸 |
[slot]setSpeed(percentSpeed: int) | 设置相对正常播放速度的百分比 |
speed() | 获取正常播放速度的百分比 |
setCacheMode(QMovie.CacheMode) | 设置缓冲模式 |
setBackgroundColor(Union[QColor,Qt.GlobalColor,str]) | 设置背景色 |
backgroundColor() | 获取背景色QColor |
[slot]start() | 开始播放动画 |
[slot]stop() | 停止播放动画 |
[slot]setPaused(paused,bool) | 暂停或继续播放动画 |
state() | 获取播放状态QMovie.MovieState |
currentFrameNumber() | 获取当前帧 |
QMovie的信号
QMovie的信号如表所示
QMovie的方法及参数类型 | 说 明 |
---|---|
currentImage() | 获取当前帧的图像QImage |
currentPixmap() | 获取当前帧的图像 QPixmap |
frameCount() | 获取总帧数 |
frameRect() | 获取尺寸QRect |
isValid() | 获取动画源是否有效 |
jumpToFrame(int) | 跳转到指定的帧,成功则返回True |
[slot]jumpToNextFrame() | 跳转到下一帧,成功则返回True |
lastErrorString() | 获取最近的出错信息 |
lastError() | 获取出错信息 |
loopCount() | 获取循环播放次数 |
nextFrameDelay() | 获取播放下一帧的等待时间(毫秒) |
QMovie的应用实例
运行下面的程序,通过双击窗口,打开动画文件并播放动画
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/4 0:54
# File_name: 01-QMovie的应用实例.py
from PySide6.QtWidgets import QApplication,QHBoxLayout,QFileDialog,QWidget,QLabel
from PySide6.QtCore import Qt
import sys
from PySide6.QtGui import QMovie
class MyLabel(QLabel):
def __init__(self,parent=None):
super().__init__(parent)
def mouseDoubleClickEvent(self,event):
filename,fil = QFileDialog.getOpenFileName(self,
caption="选择动画文件",
dir="../../../../Resources/images",
filter="动画文件(*.gif *.webp);;所有文件(*.*)")
movie = QMovie(filename)
movie.setBackgroundColor(Qt.GlobalColor.gray)
if movie.isValid():
self.setMovie(movie)
movie.start()
class MyWindow(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.resize(800,600)
self.setupUi()
def setupUi(self):
self.label = MyLabel()
self.label.setText("双击我,打开动画文件播放动画!")
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
H = QHBoxLayout(self)
H.addWidget(self.label)
if __name__ =='__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec())