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


目录
相关文章
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
1200 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
容器
Pyside6-第十三篇-布局(最后一章废话-理论篇)
Pyside6-第十三篇-布局(最后一章废话-理论篇)
1643 0
|
存储 自然语言处理 搜索推荐
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
向量数据库结合ChatGPT带来了什么 1. **语义搜索:** 使用向量数据库进行语义搜索,可以更准确地找到与查询相关的信息。ChatGPT可以理解用户的自然语言查询,而向量数据库可以根据语义相似性返回匹配的向量数据。 2. **智能推荐:** 结合ChatGPT的智能理解和向量数据库的相似性搜索,可以实现更智能的推荐系统。系统可以根据用户的历史行为和语境,向用户推荐相似的向量数据,如文章、产品或其他内容。 3. **自然语言处理与向量表示结合:** ChatGPT可以将自然语言转换为向量表示,这样就可以在向量数据库中进行更高效的查询。这种集成使得自然语言处理和向量数据库可以相互补充等
1254 0
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
1971 0
|
存储 API
uniapp登录拦截器
uniapp登录拦截器
uniapp登录拦截器
|
7月前
|
人工智能 供应链 算法
1688开店必看丨新手商家人手一份的运营指南!
在中国电商的宏大叙事中,当大众的目光多聚焦于淘宝、京东等直面消费者的零售巨头时,一条潜行于幕后的“超级供应链动脉”正以前所未有的力量重塑着中国商业的毛细血管。这便是阿里巴巴集团旗下的核心B2B平台——1688。
2227 99
|
关系型数据库 Shell Linux
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的商城管理系统源码+运行步骤
基于Python+Vue开发的商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
546 7
|
10月前
|
JSON 人工智能 前端开发
JSON基础知识与实践
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于JavaScript语言的子集,具有易读、易解析和跨语言等优点。它广泛应用于前后端数据交换、API设计、配置文件存储及移动应用开发等场景。JSON数据由键值对构成,支持字符串、数值、布尔值、数组和对象等类型,结构清晰且可嵌套,适合网络传输。自2001年由Douglas Crockford提出后,JSON因其简洁性和灵活性逐渐成为互联网主流数据格式之一,并被标准化为ECMA-404。
794 0
|
机器学习/深度学习 人工智能 自然语言处理
预训练驱动的统一文本表示-GTE魔搭社区最佳实践
文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。