pyqt曲线轨迹运动

pyqt曲线轨迹运动

  • pyqt QPropertyAnimation介绍
  • 曲线轨迹运动
  • 代码

pyqt QPropertyAnimation介绍

QPropertyAnimation 是 PyQt中的一个类,它用于对 Qt 对象的属性进行动画处理。通过使用 QPropertyAnimation,你可以平滑地改变一个对象的属性值,例如窗口的位置、大小、颜色等。

曲线轨迹运动

在这里插入图片描述

代码

# 导入必要的PyQt5模块
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPainter, QPixmap, QPainterPath
from PyQt5.QtCore import QObject, QPointF, QPropertyAnimation, pyqtProperty
import sys# 自定义的Ball类,继承自QLabel
class Ball(QLabel):def __init__(self, parent):super().__init__(parent)  # 调用父类QLabel的构造函数# 加载图片并设置到QLabel上pix = QPixmap("car.png")self.h = pix.height()  # 图片的高度self.w = pix.width()  # 图片的宽度self.setPixmap(pix)# 自定义setter方法,用于更新Ball的位置def _set_pos(self, pos):# 移动QLabel到新的位置,考虑图片的中心点self.move(int(pos.x() - self.w / 2), int(pos.y() - self.h / 2))# 使用pyqtProperty将_set_pos方法包装为一个属性,以便与Qt属性系统兼容pos = pyqtProperty(QPointF, fset=_set_pos)# 自定义的Example类,继承自QWidget
class Example(QWidget):def __init__(self):super().__init__()  # 调用父类QWidget的构造函数# 初始化视图和动画self.initView()self.initAnimation()# 初始化视图def initView(self):# 创建一个QPainterPath对象,并设置其路径self.path = QPainterPath()self.path.moveTo(30, 30)self.path.cubicTo(30, 30, 200, 350, 350, 30)# 创建一个Ball对象,并添加到当前窗口上self.ball = Ball(self)# 设置Ball的初始位置(这里虽然直接设置了属性,但它是通过pyqtProperty定义的,所以没有问题)self.ball.pos = QPointF(30, 30)# 设置窗口标题和大小,并显示窗口self.setWindowTitle("Animation along curve")self.setGeometry(300, 300, 400, 300)self.show()# 重写paintEvent方法,用于绘制QPainterPathdef paintEvent(self, e):qp = QPainter()qp.begin(self)  # 开始绘制qp.setRenderHint(QPainter.Antialiasing)  # 设置抗锯齿渲染qp.drawPath(self.path)  # 绘制QPainterPathqp.end()  # 结束绘制# 初始化动画def initAnimation(self):# 创建一个QPropertyAnimation对象,用于动画化Ball的pos属性self.anim = QPropertyAnimation(self.ball, b'pos')self.anim.setDuration(7000)  # 设置动画时长为7000毫秒(7秒)# 设置动画的起始值self.anim.setStartValue(QPointF(30, 30))# 创建一个列表,用于计算贝塞尔曲线上的点vals = [p / 100 for p in range(0, 101)]# 为动画设置关键帧值for i in vals:self.anim.setKeyValueAt(i, self.path.pointAtPercent(i))# 设置动画的结束值(虽然在这里设置了,但实际上由于关键帧的存在,这个值可能不会被直接使用)self.anim.setEndValue(QPointF(350, 30))self.anim.start()  # 开始动画# 主程序入口
if __name__ == '__main__':app = QApplication(sys.argv)  # 创建QApplication对象ex = Example()  # 创建Example对象(即主窗口)sys.exit(app.exec_())  # 进入Qt的事件循环,等待用户操作,直到应用程序关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闭散列哈希表

一、什么是 哈希 ? 1.1 哈希概念 与 哈希冲突 在正式介绍闭散列哈希之前,我们需要明确 哈希 的概念。 哈希 :构造一种数据存储结构,通过函数 HashFunc() ,使 元素的存储位置 与 其对应的键值 建立一一映射关系&…

国产开源物联网操作系统

软件介绍 RT-Thread是一个开源、中立、社区化发展的物联网操作系统,采用C语言编写,具有易移植的特性。该项目提供完整版和Nano版以满足不同设备的资源需求。 功能特点 1.内核层 RT-Thread内核包括多线程调度、信号量、邮箱、消息队列、内存管理、定时器…

JVM基础之垃圾回收

垃圾回收 1. Base 内存泄漏:不再使用的对象在系统中未被回收 内存溢出:内存泄漏的积累 手动触发垃圾回收:System.gc(),该方法不一定会立即回收垃圾,仅仅是向JVM发送一个垃圾回收请求,具体是否需要垃圾回收由JVM自行…

项目ElasticSearch 6.8 安装配置

配置文件位置: 程序配置文件:/etc/elasticsearch/elasticsearch.ymljvm配置文件:/etc/elasticsearch/jvm.options 1. 确认基础环境 确认主机limit相关参数 grep vm.max_map_count /etc/sysctl.conf && sed -i "svm.max_map_count.*vm.m…

使用php和redis实现分布式锁

实现分布式锁是在分布式环境中确保资源独占性的重要手段。在这里,我将使用 PHP 和 Redis 来展示如何实现基于 Redis 的分布式锁。 首先,我们需要使用 Redis 的 SET 指令来尝试获取锁,并设置一个过期时间,确保锁不会永久存在。在 …

怎么找回回收站里删除的XLS文件?5个恢复方法

我们经常会使用到XLS文件来存储和整理数据。然而有时候由于误操作或不小心,我们可能会将重要的XLS文件删除,并且这些文件可能还被清空出了回收站。面对这种情况许多人会感到焦虑和无助。但是不必过于担心,因为有专门的软件可以帮助我们找回这…

(Java)心得:LeetCode——5.最长回文子串

一、原题 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba"…

神经网络的偏见

神经网络的偏见 前言 神经网络是人工智能和深度学习的核心技术之一,当前的各种大模型和人工智能程序都使用了神经网络技术。 对人类来说,神经网络能根据人类输入的大量数据,实现人类训练模型的目的。但是,神经网络对人类来说是…

【Linux】什么是进程?

一个正在执行的程序,我们称之为进程。 然后我们来顺着一条线来思考。 操作系统底层是用C语言编写的,而我们的进程,它会有各种属性,那么各种属性就可以用一个结构体来对进程的各个属性进行描述,然后这个结构体里面&…

手写一个SPI FLASH 读写擦除控制器(未完)

文章目录 flash读写数据的特点1. 扇擦除SE(Sector Erase)1.1 flash_se 模块设计1.1.1 信号连接示意图:1.1.2 SE状态机1.1.3 波形图设计:1.1.4 代码 2. 页写PP(Page Program)2.1 flash_pp模块设计2.1.1 信号连接示意图:…

Soviet Kitchen

苏联厨房-具有道具和带有碰撞器的模块化建筑部件的游戏环境资产 内部资产包: 网格-253 前言-98 材料-26 纹理-116 网格格式-(FBX) 纹理格式-(PNG) 资产列表: _BigShelf 多边形计数-1986 文本大小-2048x2048 可以 多边形计数-277 结构尺寸-512x512 _Celling 多边形计数-1 …

Codeforces Round 217 (Div. 2) A. Rook, Bishop and King(BFS)

Rook, Bishop and King 题面翻译 【题目描述】 佩蒂亚正在学习国际象棋。他已经学会如何移动王、车和象。让我们提示你如何移动国象棋子。棋盘有 64 64 64个棋格,呈 8 8 8\times8 88正方形。一个格子可以用 ( r , c ) (r,c) (r,c)来表示—— r r r指行&#xff…

Stable Diffusion的技术原理

一、Stable Diffusion的技术原理 Stable Diffusion是一种基于Latent Diffusion Models(LDMs)实现的文本到图像(text-to-image)生成模型。其工作原理主要基于扩散过程,通过模拟数据的随机演化行为,实现数据…

回表的原理竟然这么简单

“回表” 是指在使用辅助索引(非聚簇索引)作为条件进行查询时,由于辅助索引中只存储了索引字段的值和对应的主键(聚簇索引)键值,因此需要根据主键(聚簇索引)中的键值去查找实际的数据…

verilog中含有无关项的序列检测

编写一个序列检测模块,检测输入信号a是否满足011XXX110序列(长度为9位数据,前三位是011,后三位是110,中间三位不做要求),当信号满足该序列,给出指示信号match。 程序的接口信号图如…

vue+onlyOffice+java : 集成在线编辑word并保存

1.docker部署onlyOffice 1.1拉取最新版onlyOffice镜像 sudo docker pull onlyoffice/documentserver 1.2运行以下命令运行容器 其中 -v 后的第一部分是挂载自己的linux的哪个目录 # 启动docker容器,默认启动端口为80,可以进行修改 docker run -i -t …

[补题记录] StarryCoding 入门教育赛3 D.电弧陷阱

URL:小白教育赛3 题目描述 劳 e e e和桶子在打派的时候被一个艾许的电弧陷阱控在原地动弹不得,于是他们想办法找出哪些地方是可以去的,哪些地方是不能去的。 给定一个由字符构成的 N ∗ M N * M N∗M的矩阵,其中包括&#xff1…

Python 中的 Lambda 函数:简单、快速、高效

大家好,今天再给大家介绍一个python的一个强大工具Lambda 函数,它允许你快速定义简单的匿名函数。这种函数是“匿名的”,因为它们不需要像常规函数那样被明确命名。 在本文中,我们将通过清晰的解释和实用的示例,深入了…

基于GIS地理技术+智慧巡检解决方案(Word原件)

传统的巡检采取人工记录的方式,该工作模式在生产中存在很大弊端,可能造成巡检不到位、操作失误、观察不仔细、历史问题难以追溯等现象,使得巡检数据不准确,设备故障隐患得不到及时发现和处理。因此建立一套完善的巡检管理系统是企…

Redis 数据操作与故障排除指南

Redis 是一个高性能的键值数据库,广泛用于缓存、会话管理等多种场景。当你在使用 Redis 时遇到 nil 值或其他问题,可能是因为你没有正确地定位到数据所在的数据库或节点。本文将帮助你理解如何在 Redis Cluster 或多数据库环境中正确操作和解决常见问题。…