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的对象名


目录
相关文章
|
3月前
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Slider的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Slider的使用及说明
406 2
|
3月前
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明
166 0
|
4月前
|
Python
PyQt5常见布局、控件用法有哪些?
这是关于Python GUI编程中使用的布局和控件的简要介绍: - **布局**: - `QHBoxLayout`:用于水平排列控件。 - `QVBoxLayout`:用于垂直排列控件。 - `QGridLayout`:在网格中排列控件,支持多行多列。 - `QFormLayout`:创建表单样式的布局,方便组织输入字段。
QT中的动画类(QPropertyAnimation)
QT中的动画类(QPropertyAnimation)
171 0
|
存储 UED
Qt自定义控件之动画文本
Qt自定义控件之动画文本
121 0
|
6月前
|
算法 开发者
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
692 1
|
6月前
QT基础教程(文本绘制)
QT基础教程(文本绘制)
138 0
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
70 0
|
Python 容器
Python高级进阶#014 pyqt5滑块控件QSlider应用
Python高级进阶#014 pyqt5滑块控件QSlider应用
276 0
pyqt5进度条
简单写一个pyqt5的进度条功能可以参照使用
112 0