欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 【python】PyQt5对象类型的判定,对象删除操作详细解读

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

2024/10/24 5:18:41 来源:https://blog.csdn.net/littlefun591/article/details/140017635  浏览:    关键词:【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才被删除
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com