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


目录
相关文章
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
1619 0
|
存储 自然语言处理 搜索推荐
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
向量数据库结合ChatGPT带来了什么 1. **语义搜索:** 使用向量数据库进行语义搜索,可以更准确地找到与查询相关的信息。ChatGPT可以理解用户的自然语言查询,而向量数据库可以根据语义相似性返回匹配的向量数据。 2. **智能推荐:** 结合ChatGPT的智能理解和向量数据库的相似性搜索,可以实现更智能的推荐系统。系统可以根据用户的历史行为和语境,向用户推荐相似的向量数据,如文章、产品或其他内容。 3. **自然语言处理与向量表示结合:** ChatGPT可以将自然语言转换为向量表示,这样就可以在向量数据库中进行更高效的查询。这种集成使得自然语言处理和向量数据库可以相互补充等
1060 0
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE是开源的Web自动化测试工具,适用于Chrome、Firefox等多款浏览器。它提供简单的录制与回放功能,用户可通过录制浏览器操作自动生成测试脚本,支持导出为多种编程语言,便于非专业测试人员快速上手,有效提升测试效率与质量。
1125 6
Selenium IDE:Web自动化测试的得力助手
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
11761 7
|
Web App开发 数据采集 JavaScript
Selenium和Pyppeteer有什么区别?
Selenium和Pyppeteer均为浏览器自动化工具,适用于网页测试与爬虫开发。Selenium需手动配置环境,支持多浏览器;Pyppeteer自动下载Chromium,仅支持Chrome,但配置简便、性能更优,适合Chrome特定需求的用户。Selenium则适合跨浏览器、跨平台的复杂场景。
|
Ubuntu Python
Python(六)使用pycharm创建项目报错:ModuleNotFoundError No module named distutils.util
在ubuntu上使用pycharm创建项目的时候报错: ModuleNotFoundError: No module named 'distutils.util'
1803 0
|
移动开发 前端开发 JavaScript
Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战
Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战
23167 3
Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战
|
数据安全/隐私保护 开发者 Python
【Python 基础】检查字符串是否只包含数字和字母?
【5月更文挑战第8天】【Python 基础】检查字符串是否只包含数字和字母?
|
存储 JSON JavaScript
什么是json?json可以存放在哪几种数据类型?在什么时候用?
什么是json?json可以存放在哪几种数据类型?在什么时候用?
738 0
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Progress Bar的使用及说明
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Progress Bar的使用及说明
2216 0

热门文章

最新文章