【python】PyQt5对象类型的判定,对象删除操作详细解读
创始人
2025-01-15 11:08:30
0次

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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 sys     app = 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 sys     app = 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 = obj1         obj2 = 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 sys     app = QApplication(sys.argv)      window = Window()      window.show()      sys.exit(app.exec_()) 

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

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...