【python】PyQt5对象类型的判定,对象删除操作详细解读

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5,tkinter,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战
景天的主页:景天科技苑

文章目录

  • PyQt5类型判定
    • 类型判断演示
    • PyQt5类型判断案例
  • PyQt5删除对象
    • 删除对象案例

PyQt5类型判定

主要是用来判定一个对象的类型,或者说是否继承自某个类
相关API和应用场景如下
主要有两个方法

  • isWidgetType() 判断某个对象是都控件类型
  • inherits() 一个对象是否继承(直接或间接)自某个父类

两方法返回值均为True或False
在这里插入图片描述

类型判断演示

遍历对象,判断对象所属类型和父类

from PyQt5.Qt import *class Window(QWidget):def __init__(self):super().__init__()self.setWindowTitle("QObject的学习")self.resize(500, 500)self.setup_ui()def setup_ui(self):self.QObject类型判定()def QObject类型判定(self):# *************API***************开始obj = QObject()w = QWidget()btn = QPushButton()label = QLabel()objs = [obj, w, btn, label]for o in objs:print("是否是QWidget的控件类型",o.isWidgetType())print("父类是否是QWidget",o.inherits("QWidget"))print("父类是否是QPushButton",o.inherits("QPushButton"))print("------------------------------------------")# *************API***************结束if __name__ == '__main__':import sysapp = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())

运行。可以判定某个对象所属的类型
在这里插入图片描述

PyQt5类型判断案例

根据所属类型, 设置指定的样式

from PyQt5.Qt import *class Window(QWidget):def __init__(self):super().__init__()self.setWindowTitle("QObject的学习")self.resize(500, 500)self.setup_ui()def setup_ui(self):self.QObject类型判定()def QObject类型判定(self):# *************API***************开始# obj = QObject()# w = QWidget()# btn = QPushButton()# label = QLabel()## objs = [obj, w, btn, label]# for o in objs:#     print("是否是QWidget的控件类型",o.isWidgetType())#     print("父类是否是QWidget",o.inherits("QWidget"))#     print("父类是否是QPushButton",o.inherits("QPushButton"))#     print("------------------------------------------")# *************API***************结束# *************案例***************开始label1 = QLabel(self)label1.setText("景天科技苑")label1.move(100, 100)label2 = QLabel(self)label2.setText("科技不间断")label2.move(150, 150)btn = QPushButton(self)btn.setText("点我")btn.move(200, 200)#循环遍历子对象# for widget in self.findChildren(QLabel):for widget in self.children():# print(widget)# if widget.isWidgetType():#将子对象中为QLabel的对象设置背景样式if widget.inherits("QLabel"):widget.setStyleSheet("background-color: cyan;")# *************案例***************结束if __name__ == '__main__':import sysapp = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())

运行,QLabel颜色都发生了变化,btn的颜色不变,说明选定了QLabel
在这里插入图片描述

PyQt5删除对象

obj.deleteLater()
删除一个对象时, 也会解除它与父对象之间的关系。
deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象。
这样做的好处是可以在这些延迟删除的时间内完成一些操作,坏处就是内存释放会不及时。
在这里插入图片描述

删除对象案例

from PyQt5.Qt import *class Window(QWidget):def __init__(self):super().__init__()self.setWindowTitle("QObject的学习")self.resize(500, 500)self.setup_ui()def setup_ui(self):self.QObject对象删除()def QObject对象删除(self):obj1 = QObject()#为了防止局部变量运行完方法就销毁,将局部变量赋值给类变量self.obj1 = obj1obj2 = QObject()obj3 = QObject()obj3.setParent(obj2)obj2.setParent(obj1)#创建信号与槽obj1.destroyed.connect(lambda : print("obj1被释放了"))obj2.destroyed.connect(lambda : print("obj2被释放了"))obj3.destroyed.connect(lambda : print("obj3被释放了"))#删除对象# del obj2  #这样并不能删除obj2.deleteLater()print(obj1.children())#obj2并没有立马被释放print("obj2",obj2)#执行了deleteLater后,向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象,才会真正的去释放相关的对象if __name__ == '__main__':import sysapp = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())

运行
可以看到obj2并没有立马被删除,立马打印obj1的子对象和obj2还是能打印出来的
过一段时间,obj2才被删除
在这里插入图片描述

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

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

相关文章

汽车预约维修小程序的设计

管理员账户功能包括:系统首页,个人中心,技师管理,技师信息管理,用户预约管理,取消预约管理,订单信息管理,系统管理 微信端账号功能包括:系统首页,技师信息&a…

Ajax从零到实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案

一、问题背景 最近在开发app项目,其中有个需求就是需要在app软件内显示图片、pdf和视频,一开始想的解决方案是分开实现,也就是用Image组件显示图片,找一个加载pdf的插件和播放视频的插件,转念一想觉得太麻烦了&#x…

Lumos学习王佩丰Excel第四讲:排序与选择

一、排序 1、简单排序:不要选中一列排序,不然只是局部排序,其他数据都会发生错乱。 2、多条件排序 3、2003版本中超过3个排序条件时如何处理:从最后一个条件到第一个条件倒着按照要求依次排序。 4、按颜色排序 5、自定义排序次序…

LabVIEW在半导体自动化测试中的应用

半导体制造的复杂性和精密度要求极高,每一个生产步骤都需要严格的控制和监测。自动化测试设备在半导体制造中起到了关键作用,通过精密测量和数据分析,确保产品质量和生产效率。本文介绍如何使用LabVIEW结合研华硬件,开发一个用于半…

腾讯广告优量汇Android一面凉经(2024)

腾讯广告优量汇Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《腾讯广告优量汇Android一面凉经(2024)》。 面试职位: 腾讯广告优量汇-SDK客…

ensp防火墙实验

实验拓扑图 实验要求 1,DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问。 2,生产区不允许访问互联网,办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允…

渲染100农场是什么?渲染100邀请码1a12

作为设计师,渲染农场肯定听过,它在视觉行业有着重要作用,那么渲染农场是什么您知道吗?今天我们就来看看吧。 渲染农场,英文名Render Farm,是一种分布式并行计算系统,是利用现成的以太网、CPU和…

bash: redi-cli: 未找到命令...

问题描述 在执行命令:redi-cli --bigkeys 提示:bash: redi-cli: 未找到命令... 确定服务器是否有Redis进程 ps -ef | grep redis查找Redis 文件信息 find / -name "redis-*"进入到当前目录 cd /usr/bin/再次执行命令 涉及redis-cli 连…

《金山 WPS AI 2.0:重塑办公未来的智能引擎》

AITOP100平台获悉,在 2024 世界人工智能大会这一科技盛宴上,金山办公以其前瞻性的视野和创新的技术,正式发布了 WPS AI 2.0,犹如一颗璀璨的星辰,照亮了智能办公的新征程,同时首次公开的金山政务办公模型 1.…

【深度好文】合作伙伴关系管理自动化:双向共赢新趋势

在当今快速变化的商业环境中,合作伙伴关系已成为企业成功的关键因素之一。为了更高效地管理这些关系,合作伙伴关系管理自动化正逐渐成为行业的新趋势,它不仅简化了管理流程,更促进了双方共赢的局面。 一、传统管理 VS 自动化管理 …

【RHCE】实验(HTTP,DNS,SELinux,firewalld的运用)

一、题目 二、主服务器配置 1.下载HTTP服务,DNS服务 [rootlocalhost ~]# yum install -y httpd bind 2.开启防火墙,放行服务 # 开启防火墙 [rootlocalhost ~]# systemctl start firewalld # 放行服务 [rootlocalhost ~]# firewall-cmd --add-service…

【计算机毕业设计】012基于微信小程序的科创微应用平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

C语言-顺序表

🎯引言 欢迎来到HanLop博客的C语言数据结构初阶系列。在这个系列中,我们将深入探讨各种基本的数据结构和算法,帮助您打下坚实的编程基础。本次我将为你讲解。顺序表(也称为数组)是一种线性表,因其简单易用…

Windows环境+C#实现显示接口测试

代码如下: using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

C++入门到进阶(图文详解,持续更新中)

C入门到进阶(图文详解,持续更新中) 目录 C入门到进阶(图文详解,持续更新中) 数据 数据类型 基本数据类型/内置数据类型 C常用运算符 赋值运算符 关系运算符 逻辑运算符 杂项运算符 数据的本地化…

NFS服务器、autofs自动挂载综合实验

综合实验 现有主机 node01 和 node02,完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 node02 主机…

jmeter-beanshell学习7-props获取全局变量和设置全局变量

继续写点不痛不痒的小东西。第一篇写了vars设置变量,但是vars只能作用在同一个线程组。跨线程组情况比较少,要是用到跨线程组,有个pros,用法和vars一样。 在setup线程组设置变量a,执行的时候,jmeter会先执行…

Windows 电脑查看 WiFi 密码的方法都有哪些?

从设置面板中查看 当你使用的是笔记本电脑并且连接 WiFi 之后可以在设置面板中查看 WiFi 密码,首先打开设置界面,然后点击网络和 Internet,找到 WiFi 之后点击进入,然后点击管理已知网络。 然后点击已经连接好的无线网络。 进入之…

国产化趋势下源代码数据防泄密的信创沙盒的方案分享

随着国产化的大力推进,越来越多的企事业单位在逐步替换Windows、Linux等操作系统的使用。那么什是国产化了?国产化是指在产品或服务中采用国内自主研发的技术和标注,替代过去依赖的他国的产品和服务,国产化又被称之为“信创”&…