当前位置: 首页 > news >正文

Python PyQt5 在frame中生成多个QLabel控件和彻底销毁QLabel控件

文章目录

      • 步骤 1: 创建主窗口和布局
      • 步骤 2: 添加`QLabel`到`QFrame`
      • 步骤 3: 销毁`QLabel`
      • 示例代码

在这里插入图片描述

在PyQt5中,在QFrame或任何其他容器控件中生成多个QLabel控件并通过一个标志位或方法来彻底销毁这些QLabel控件是相对直接的操作。以下是一个简单的示例,展示了如何在QFrame中动态地添加和彻底销毁QLabel控件。

步骤 1: 创建主窗口和布局

首先,我们需要一个主窗口,一个QFrame作为容器,以及一个布局来管理QFrame中的控件。

步骤 2: 添加QLabelQFrame

通过编写一个函数来动态创建QLabel,并将其添加到QFrame的布局中。

步骤 3: 销毁QLabel

要销毁QLabel,我们可以从布局中移除它,并将其父对象设置为None(这将触发QLabel的删除)。但请注意,如果QLabel是动态创建的,并且我们没有在类的其他部分保留对它的引用,那么仅仅从布局中移除它可能就足够了,因为当QLabel的最后一个父对象(即包含它的布局或窗口)被销毁时,它也会被销毁。然而,显式地将其父对象设置为None可以确保立即释放资源。

示例代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFrame, QLabel, QPushButton
from PyQt5.QtCore import Qtclass MainWindow(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.frame = QFrame(self)self.frame.setFrameShape(QFrame.StyledPanel)self.frame.setFrameShadow(QFrame.Raised)self.layout = QVBoxLayout(self.frame)self.labels = []  # 存储QLabel的引用以便稍后销毁# 添加按钮以添加和销毁QLabelself.addButton = QPushButton('Add Label', self)self.addButton.clicked.connect(self.addLabel)self.removeButton = QPushButton('Remove Last Label', self)self.removeButton.clicked.connect(self.removeLabel)# 设置主窗口布局mainLayout = QVBoxLayout(self)mainLayout.addWidget(self.frame)mainLayout.addWidget(self.addButton)mainLayout.addWidget(self.removeButton)self.setLayout(mainLayout)def addLabel(self):label = QLabel(f'Label {len(self.labels) + 1}', self.frame)self.layout.addWidget(label)self.labels.append(label)def removeLabel(self):if self.labels:last_label = self.labels.pop()self.layout.removeWidget(last_label)last_label.setParent(None)  # 彻底销毁QLabelif __name__ == '__main__':app = QApplication(sys.argv)ex = MainWindow()ex.show()sys.exit(app.exec_())

在这个示例中,我们有一个MainWindow类,它包含一个QFrame来存储QLabel控件。我们还有两个按钮:一个用于添加新的QLabelQFrame,另一个用于移除最后一个添加的QLabel。我们使用一个列表self.labels来存储对QLabel的引用,以便在移除时可以轻松地访问它们。当我们调用removeLabel方法时,我们从列表中获取最后一个QLabel的引用,从布局中移除它,并将其父对象设置为None以彻底销毁它。

相关文章:

  • 【工具分享】Chimera勒索病毒解密工具
  • 流行的微前端框架有哪些,适应场景是什么
  • overlayscrollbars使用
  • 基于大数据技术的颈椎病预防交流与数据分析及可视化系统
  • 易燃气体检测系统源码分享
  • 统信服务器操作系统【qcow2 镜像空间扩容】方案
  • 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField
  • CVE-2024-1112 Resource Hacker 缓冲区溢出分析
  • VBA技术资料MF205:移动工作表时名称重复的处理
  • 吹爆这份Stable diffusion提示词攻略!
  • python爬虫:将知乎专栏文章转为pdf
  • 玩美移动AI护肤品推荐解决方案,全新升级 为护肤品牌及其零售商,提供自动匹配推荐产品功能
  • 教师信息素养测评:多维视角下的全面审视
  • Splashtop 加入 Microsoft 智能安全协会
  • A 股疯了?交易所系统都被买崩了!
  • “大数据应用场景”之隔壁老王(连载四)
  • 《Java编程思想》读书笔记-对象导论
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular 响应式表单 基础例子
  • CSS相对定位
  • C学习-枚举(九)
  • HTTP中GET与POST的区别 99%的错误认识
  • Java 最常见的 200+ 面试题:面试必备
  • Java小白进阶笔记(3)-初级面向对象
  • JS专题之继承
  • linux安装openssl、swoole等扩展的具体步骤
  • Redis学习笔记 - pipline(流水线、管道)
  • SegmentFault 2015 Top Rank
  • spring boot下thymeleaf全局静态变量配置
  • 初探 Vue 生命周期和钩子函数
  • 软件开发学习的5大技巧,你知道吗?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 移动端唤起键盘时取消position:fixed定位
  • 06-01 点餐小程序前台界面搭建
  • #HarmonyOS:Web组件的使用
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (day 12)JavaScript学习笔记(数组3)
  • (九)信息融合方式简介
  • (离散数学)逻辑连接词
  • (七)c52学习之旅-中断
  • (七)Java对象在Hibernate持久化层的状态
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)setTimeout 和 setInterval 的区别
  • **CI中自动类加载的用法总结
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .cfg\.dat\.mak(持续补充)
  • .describe() python_Python-Win32com-Excel
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net语言中的StringBuilder:入门到精通
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @Builder用法