【自定义磨砂动态背景】前端及pyqt6实现



如何实现一个自定义的磨砂动态背景呢?

这种效果看起来特别的高端,很新颖美观。

具体的效果可以看这里的演示:https://www.bilibili.com/video/BV1zj411H7wd/

其实原理就是底层有多个多彩多边形在移动,然后再盖上一层模糊滤镜。

前端的话css比较强大可以控制多边形的颜色同时变化,效果更好点。但是我用pyqt6实现的效果自我感觉也不赖。

我这里封装了两个类,给出了一个使用的demo,大家可以研究一下。如果有帮到你,希望给出一个免费的三连。

自定义磨砂动态背景代码

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget,QGraphicsBlurEffect
from PyQt6.QtGui import QPainter, QBrush, QColor,QIcon,QPolygonF
from PyQt6.QtCore import Qt, QRectF, QPropertyAnimation, QEasingCurve,QRect,QPointF
class BlurredLabel(QLabel):def __init__(self, parent=None,items=[]):super().__init__(parent)self.setGeometry(0,0,parent.width(),parent.height())for item in items:type=item.get('type',11)color=item.get('color','red')last_time=item.get('last_time',3)shape=item.get('shape',1)# beisaier=item.get('beisaier',)MoveLabel(self,type=type,color=color,last_time=last_time,shape=shape)print(parent.size())print(self.size())blur_effect = QGraphicsBlurEffect()blur_effect.setBlurRadius(300)self.setGraphicsEffect(blur_effect)
class MoveLabel(QLabel):def __init__(self, parent=None,type=11,shape=0,color='blue',last_time=5,beisaier=None):super().__init__(parent)self.side_width = min(parent.width(), parent.height()) // 2  # 设置半径为父类宽高最小值的一半self.setGeometry(0,0,self.side_width,self.side_width)self.shape=shapeself.last_time = last_timeself.color = colorif type==11:self.start_rect = QRectF(0, 0, self.width(), self.height())self.end_rect = QRectF(self.parent().width() - self.side_width, self.parent().height() -self.side_width,self.side_width, self.side_width)elif type==12:self.start_rect = QRectF(parent.width() - self.side_width, parent.height() - self.side_width,self.side_width, self.side_width)self.end_rect = QRectF(0, 0, self.width(), self.height())elif type==21:self.start_rect=QRectF((parent.width()-self.side_width)//2,0,self.side_width, self.side_width)self.end_rect=QRectF((parent.width()-self.side_width)//2,parent.height()-self.side_width,self.side_width, self.side_width)elif type==22:self.start_rect = QRectF((parent.width()-self.side_width)//2,parent.height()-self.side_width,self.side_width, self.side_width)self.end_rect = QRectF((parent.width()-self.side_width)//2,0,self.side_width, self.side_width)elif type==31:self.start_rect = QRectF(parent.width()-self.side_width,0,self.side_width, self.side_width)self.end_rect =  QRectF(0,parent.height()-self.side_width,self.side_width, self.side_width)elif type==32:self.start_rect = QRectF(0,parent.height()-self.side_width,self.side_width, self.side_width)self.end_rect = QRectF(parent.width()-self.side_width,0,self.side_width, self.side_width)elif type==41:self.start_rect = QRectF(parent.width()-self.side_width,(parent.height()-self.side_width)//2,self.side_width, self.side_width)self.end_rect = QRectF(0,(parent.height()-self.side_width)//2,self.side_width, self.side_width)elif type==42:self.start_rect = QRectF(0,(parent.height()-self.side_width)//2,self.side_width, self.side_width)self.end_rect = QRectF(parent.width()-self.side_width,(parent.height()-self.side_width)//2,self.side_width, self.side_width)self.animation = QPropertyAnimation(self, b'geometry')self.animation.finished.connect(self.toggleAnimation)self.startAnimation()def paintEvent(self, event):painter = QPainter(self)painter.setRenderHint(QPainter.RenderHint.Antialiasing)if self.shape==1:# 计算圆的位置rect = self.rect().adjusted(1, 1, -1, -1)# 设置刷子brush = QBrush(QColor(self.color))  # 刷子颜色为半透明红色painter.setBrush(brush)# 绘制圆painter.drawEllipse(rect)elif self.shape==2:painter.fillRect(0, 0, self.side_width, self.side_width, QColor(self.color))  # 使用红色填充正方形elif self.shape==3:# 计算三角形的顶点坐标p1 = QPointF(self.width() / 2, (self.height() - self.side_width * 0.866) / 2)  # 0.866 为 sqrt(3)/2,即等边三角形的高度p2 = QPointF((self.width() - self.side_width) / 2, (self.height() + self.side_width * 0.866) / 2)p3 = QPointF((self.width() + self.side_width) / 2, (self.height() + self.side_width * 0.866) / 2)triangle = QPolygonF([p1, p2, p3])painter.setBrush(QBrush(QColor(0, 0, 255)))  # 使用蓝色填充三角形painter.drawPolygon(triangle)def toggleAnimation(self):# 切换动画的起始值和结束值a,b=self.animation.startValue(),self.animation.endValue()a,b=b,aself.animation.setStartValue(a)self.animation.setEndValue(b)self.animation.start()def startAnimation(self):self.animation.setStartValue(self.start_rect)self.animation.setEndValue(self.end_rect)self.animation.setDuration(self.last_time*1000)self.animation.setEasingCurve(QEasingCurve.Type.InOutQuad)  # 设置缓动曲线self.animation.start()
class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setGeometry(300,100,800,600)self.initUI()def initUI(self):self.setWindowIcon(QIcon('logo.png'))central_widget = QWidget(self)layout = QVBoxLayout(central_widget)# f, parent = None, type = 11, shape = 0, color = 'blue', last_time = 5, beisaier = None):shapes=[{'type':11,'shape':1,'color':'#FF416C','last_time':6},{'type':21,'shape':3,'color':'#12c2e9','last_time':5},{'type':31,'shape':1,'color':'#c471ed','last_time':7},{'type':41,'shape':2,'color':'#f64f59','last_time':8},{'type':12,'shape':1,'color':'#7303c0','last_time':9},{'type':22,'shape':1,'color':'#fdeff9','last_time':4},# {'type':32,'shape':1,'color':'pink','last_time':4},# {'type':42,'shape':1,'color':'pink','last_time':4},]label = BlurredLabel(self,shapes)layout.addWidget(label)self.setCentralWidget(central_widget)self.setWindowTitle('磨砂动态背景')label_=QLabel('type参数两位数,第一位1,2,3,4表示直线,\n第二位1表示正向,2表示反向',self)label_.adjustSize()  # 调整标签大小以适应内容# label_.setWordWrap(True)
def main():app = QApplication(sys.argv)mainWindow = MainWindow()mainWindow.show()sys.exit(app.exec())
if __name__ == '__main__':main()

参数说明:

type参数说明:
image.png

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

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

相关文章

React Router有几种模式?实现原理?

面试官:说说React Router有几种模式?实现原理? 一、是什么 在单页应用中,一个web项目只有一个html页面,一旦页面加载完成之后,就不用因为用户的操作而进行页面的重新加载或者跳转,其特性如下&a…

Windows系统配置pytorch环境,Jupyter notebook编辑器安装使用(深度学习本地篇)

如今现在好一点的笔记本都自带英伟达独立显卡,对于一些简单的深度学习项目,是不需要连接服务器的,甚至数据量不大的话,cpu也足够进行训练学习。我把电脑上一些以前的笔记整理一下,记录起来,方便自己35岁事业…

C++系列第九篇 数据类型下篇 - 复合类型(指针高级应用)

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建(WSL 方向)-CSDN博客 C 系列 第二篇 你真的了解C吗?本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

谷歌 SGE 和生成式 AI 在搜索中:2024 年会发生什么

2024 年,Google 的搜索生成体验将如何影响营销?探索 AI 驱动的搜索趋势、SERP 中的 SGE、自然流量影响等。 最初,Labs 中的 Google 搜索生成体验 (SGE) 实验预计将于 2023 年 12 月“结束”。但随着谷歌实验室网站的最…

关于Python里xlwings库对Excel表格的操作(十九)

这篇小笔记主要记录如何【取消合并单元格】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2)如何在Wps下使用xlwi…

113基于matlab的PSO-SVM多输入单输出预测程序

基于matlab的PSO-SVM多输入单输出预测程序。PSO对SVM的两个参数进行优化得到最佳参数值进行预测。并输出预测误差等相应结果。程序已调通,可直接运行。 113matlabPSO-SVM多输入单输出 (xiaohongshu.com)

使用 Jekyll 构建你的网站 - 初入门

文章目录 一、Jekyll介绍二、Jekyll安装和启动2.1 配置Ruby环境1)Windows2)macOS 2.2 安装 Jekyll2.3 构建Jekyll项目2.4 启动 Jekyll 服务 三、Jekyll常用命令四、目录结构4.1 主要目录4.2 其他的约定目录 五、使用GitLink构建Jekyll博客5.1 生成Jekyll…

利用html2Canvas将表格下载为html

给到我的需求是点击按钮时请求后端接口,根据后端返回的数据,生成表格,并将表格的内容直接下载为html,如下图。 平常做的下载都是后端返回二进制流,这次前端做下载那就必须把页面先画出来,因为下载下来的表格在页面上是不显示的&a…

redis复习笔记01(小滴课堂)

高并发的必备两大“核技术”队列和缓存 介绍本地缓存和分布式缓存 Nosql介绍和Reidis介绍 Linux服务器源码安装Redis6和相关依赖 在路径下上传压缩包。 上传压缩包。 版本更新了,但这是临时的。 版本更新了。 解压压缩包: 重命名: 我们可以看…

【HarmonyOS开发】OpenHarmony如何实现⼀次开发,多端部署

OpenHarmony提供用户程序框架、Ability框架以及UI框架,能够保证开发的应用在多终端运行时保证一致性。一次开发、多端部署。 多终端软件平台API具备一致性,确保用户程序的运行兼容性。 HarmonyOS提供了用户程序框架、Ability框架以及UI框架,…

大数据Doris(四十一):物化视图简单介绍

文章目录 物化视图简单介绍 一、适用场景

【AI】阿里云免费GPU服务资源领取方法

首先,直接点击链接:阿里云免费试用 也可以复制链接到浏览器进行跳转:https://free.aliyun.com?userCodernbj0c1o 页面如下所示:这里的免费试用期限是3个月,给的资源点够我们试用V100 16G显存服务器300个小时&#xff…