Pyqt5--属性动画-文本移动(Pyside6适用)

简介: Pyqt5--属性动画-文本移动(Pyside6适用)

本章来了解一下比较实用的一个动画效果,称为属性动画,但是属性动画有很多种,今天我们说的是文本移动。主要作用于标签移动。

没错,就是它了,主要目的就是让它动起来。

在此之前,需要了解一下使用哪些库来操作。属性动画嘛,所以对应的库就是QPropertyAnimation。知道库了。那么还需要了解一下其中的方法。

class QPropertyAnimation(QVariantAnimation):
    """
    QPropertyAnimation(parent: typing.Optional[QObject] = None)
    QPropertyAnimation(target: QObject, propertyName: Union[QByteArray, bytes, bytearray], parent: typing.Optional[QObject] = None)
    """

第一个参数是所需要作用的对象,另一个就是属性了,其中的常用属性有:

  1. 位置属性:b"pos" - 控件的左上角坐标点,可以使控件平滑移动。
  2. 大小属性:b"size" - 控件的宽度和高度,可以使控件平滑改变大小。
  3. 透明度属性:b"opacity" - 控件的透明度,可以使控件平滑改变透明度。
  4. 旋转属性:b"rotation" - 控件的旋转角度,可以使控件平滑旋转。
  5. 几何属性:b"geometry" - 控件的位置和大小,可以同时实现控件平滑移动和改变大小。

而今天要用到的就是第五个,b"geometry"。

如何实现呢?肯定是需要一个QLabel的,也就是这样写:

QPropertyAnimation(self.label, b"geometry")

前期的Ui搭建就不细说了,直接上代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import Qt, QPropertyAnimation, QRectF
class MovingTextWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    def init_ui(self):
        self.setGeometry(100, 100, 400, 100)
        # 创建一个 QLabel 来显示文本
        self.label = QLabel("开发者: 清安", self)
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setStyleSheet("font-size: 20px;")

就这样简单,没有别的东西了。剩下的就是写动画代码了,接着看:

首先我们需要实例化方法,然后设置动画时长,在设置启动位置以及结束位置,最后启动即可。来看看代码

# 创建一个动画对象,设置属性名称为 "geometry",从初始位置(0, 0) 到 (400, 100) 平滑过渡
        self.animation = QPropertyAnimation(self.label, b"geometry")
        self.animation.setDuration(2000)  # 设置动画时长为 3 秒
        self.animation.setStartValue(QRectF(0, 0, 0, 20))  # 初始位置
        self.animation.setEndValue(QRectF(0, 0, 400, 20))  # 结束位置
        # 启动动画
        self.animation.start()

其实位置的QRectF参数,是可以调节的,除了上述代码的平行移动,可以上下左右,弧线移动。

上述代码存在一个问题,就是,只能移动一次。那么再来优化一下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import Qt, QPropertyAnimation, QRectF
class MovingTextWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    def init_ui(self):
        self.setGeometry(100, 100, 400, 100)
        # 创建一个 QLabel 来显示文本
        self.label = QLabel("开发者: 清安", self)
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setStyleSheet("font-size: 20px;")
        # 创建一个动画对象,设置属性名称为 "geometry",从初始位置(0, 0) 到 (400, 100) 平滑过渡
        self.animation = QPropertyAnimation(self.label, b"geometry")
        self.animation.setDuration(2000)  # 设置动画时长为 3 秒
        self.animation.setStartValue(QRectF(0, 0, 0, 20))  # 初始位置
        self.animation.setEndValue(QRectF(0, 0, 400, 20))  # 结束位置
        # 信号连接到槽函数,当动画结束时执行
        self.animation.finished.connect(self.reset_animation)
        # 启动动画
        self.animation.start()
    def reset_animation(self):
        # 重置动画,将文本移回起始位置
        self.animation.setDirection(QPropertyAnimation.Backward)
        self.animation.start()

这样就能看到它在指定范围内移动了。甚至你可以让它文字一直变化。

剩下的就是将已经实现的功能嵌入到项目中去就好了,记得修改QLabel的对象名


目录
相关文章
|
2月前
pyqt5-基本窗口控件
pyqt5-基本窗口控件
28 0
|
11月前
Pyside6-第八篇-QLabel文本标签
Pyside6-第八篇-QLabel文本标签
275 0
|
9月前
|
存储 UED
Qt自定义控件之动画文本
Qt自定义控件之动画文本
|
11月前
Pyside6-第二篇-QPushButton一个普通按钮
Pyside6-第二篇-QPushButton一个普通按钮
201 0
|
8月前
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
47 0
|
9月前
|
Python
PyQt5-Qt Designer中如何设置信号与槽?
PyQt5-Qt Designer中如何设置信号与槽?
107 0
|
11月前
Qt图片浏览器
可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来或者打开文件选择 重载实现dragEnterEvent(拖拽)、dropEvent(拖拽放下)、resizeEvent(窗口大小改变)
87 0
|
Python 容器
Python高级进阶#014 pyqt5滑块控件QSlider应用
Python高级进阶#014 pyqt5滑块控件QSlider应用
238 0
|
数据安全/隐私保护
从零开始学Pyqt5之【控件介绍】(2):QLineEdit控件
从零开始学Pyqt5之【控件介绍】(2):QLineEdit控件
从零开始学Pyqt5之【控件介绍】(2):QLineEdit控件