PyQt5

news/2024/11/15 4:10:46/

基于PyQt5的重绘机制实现加载页面

  • 效果预览
  • 代码说明
    • 控件初始化
    • 超时回调
    • 重绘事件
    • 缩放事件
  • 代码获取

效果预览

直接看图,效果展现为跟随黑点顺时针转动,且有明暗变化
在这里插入图片描述

代码说明

控件初始化

initUI主要用于初始化用户界面(UI)。它创建了一个具有特定样式、占位文本、只读属性的文本框,设置了初始字体大小,初始化了一个颜色列表,并创建了一个定时器用于触发部件重绘事件。

python">    def initUI(self):self.text_edit = QTextEdit(self)                                        # 创建一个文本框'''加粗斜体无边框'''self.text_edit.setStyleSheet("font-style: italic; font-weight: bold; border: none; background-color: rgba(0, 0, 0, 0);")self.text_edit.setPlaceholderText(self.__wait_info())                   # 文本框内容self.text_edit.setReadOnly(True)                                        # 只读'''设置初始字体大小'''self.font = QFont()self.font.setPointSize(1)self.text_edit.setFont(self.font)'''初始化RGB列表'''self.color = []for angle in range(0, 18):self.color.append(14 * angle)'''初始化定时器用于出发部件重绘事件'''self.timer = QTimer(self)self.timer.timeout.connect(self.update_color)self.timer.start(100)
  • self.color用于存储颜色值,通过for循环,将一系列值(14 的倍数,从 0 到 14*17)添加到颜色列表中
  • self.timer 用于更新颜色,固定超时时间为每 100 毫秒触发一次超时信号

超时回调

  • 拼接 self.color[1:]self.color[:1]
  • self.update 触发部件的重绘
python">    def update_color(self):'''更新RGB队列 模拟颜色变换'''self.color = self.color[1:] + self.color[:1]'''触发部件重绘:触发paintEvent事件,从而导致部件重新绘制自身'''self.update()

重绘事件

  • self.__get_radius() 用于获取圆形的半径(根据窗口的大小动态计算)
  • for angle in range(0, 18) 绘制18个点以组成圆型
  • self.__paint_dot 用于在指定坐标绘制点
python">    def __paint_circle(self):'''计算当前窗口的中心坐标'''__center_x = self.width() // 2__center_y = self.height() // 2'''更新半径,跟随窗口大小变化而变化'''__radius = self.__get_radius()for angle in range(0, 18):'''计算绘制坐标'''__x = __center_x + int(__radius * math.cos(math.radians(20 * (18 - angle))))__y = __center_y + int(__radius * math.sin(math.radians(20 * (18 - angle))))'''绘制点 点的颜色根据self.color的值进行变换'''self.__paint_dot(__x, __y, self.color[angle])'''重写基类的重绘事件'''def paintEvent(self, event):'''用于自定义部件的外观绘制'''self.__paint_circle()

缩放事件

为了使UI更友好,我们可以重写基类的resizeEvent事件,使圆型可以根据窗口的大小自动变化大小

python">    def resizeEvent(self, event):'''当窗口或部件的大小发生改变时,resizeEvent方法会被自动调用''''''setGeometry 调整窗口部件的位置和大小'''__center_x = self.width() // 2__center_y = self.height() // 2											# 计算窗口的中心坐标__font_size = min(event.size().width(), event.size().height()) // 45	# 根据窗口的新尺寸计算字体大小__new_w = len(self.__wait_info()) * __font_size							# 计算文本框的新宽度'''计算文本框的新位置坐标'''__new_x =  __center_x - __new_w // 2__new_y = __center_y + self.__get_radius() + 10'''使用setGeometry方法设置文本框的新位置和大小'''self.text_edit.setGeometry(__new_x,__new_y,__new_w,int(__font_size * 2.7))'''调整字体大小'''self.font.setPointSize(__font_size)self.text_edit.setFont(self.font)

在缩放事件产生时,会自动触发重绘事件

代码获取

请从我的资源获取


http://www.ppmy.cn/news/1546248.html

相关文章

scala set训练

Set实训内容: 1.创建一个可变Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示),初始化为包含几本你喜欢的书籍 2.添加两本新的书籍到图书馆集合中,使用操作符 3.删除一本图书馆集合中的书籍&…

Linux——入门

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟 本篇涵盖: ①:初识Linux基础指令以及用法(只谈常用的) ②:补足一些有关Linux的常识 一、Linux基础指令及用法 容易记住的: ls-la&#x…

银行归属地查询API接口有哪些好处?

随着银行卡信息的重要性日益凸显,安全性和隐私保护将成为银行卡归属地查询 API 接口发展的重点。日益进步的加密技术、身份认证技术和不断完善的相关法律法规都在促进 API 接口提供商加强对用户隐私的保护,规范数据的使用和共享行为。 且随着全球经济的…

传统媒体终端移动化发展新趋势:融合开源 AI 智能名片与 S2B2C 商城小程序的创新探索

摘要:本文围绕传统媒体在新媒体环境下终端移动化的发展展开论述。阐述了传统媒体终端移动化的现状、“三网融合”带来的技术保障以及智能终端和移动互联网技术对其转型的推动作用。进一步探讨将开源 AI 智能名片和 S2B2C 商城小程序融入传统媒体终端移动化发展的创新…

NoSQL大数据存储技术测试(2)NoSQL数据库的基本原理

写在前面:未完成测试的同学,请先完成测试,此博文供大家复习使用,(我的答案)均为正确答案,大家可以放心复习 单项选择题 第1题 NoSQL的主要存储模式不包括 键值对存储模式 列存储模式 文件…

拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟

拓扑的形变指的是通过连续地拉伸、弯曲或扭曲物体而不进行撕裂或粘合来改变其形状的一种数学变换。拓扑形变属于拓扑学的一个分支,研究在这些操作下保持不变的性质。简单来说,它关注的是物体“形状的本质”,而不是具体的几何形状。 拓扑形变…

Go语言锁笔记

Go 语言中的锁机制提供了多种方式来控制并发访问,以确保数据的一致性和安全性。以下是 Go 中常用的几种锁: 1. sync.Mutex(互斥锁) 用途:控制对共享资源的独占访问,只允许一个 goroutine 持有锁&#xff…

linux入门教程:perl库

在Linux系统中,Perl是一种功能丰富的计算机程序语言,广泛应用于CGI、图形编程、系统管理、网络编程、金融、生物等多个领域。关于Perl库的教程,可以涵盖从安装Perl、使用Perl库到编写Perl脚本的多个方面。以下是一个简要的Perl库教程&#xf…