60-输入和显示- 播放音频和视频-动画播放 QMovie

动画播放 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
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())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值