当前位置: 代码网 > it编程>前端脚本>Python > Python PyQt5对象类型的判定对象删除操作详细介绍

Python PyQt5对象类型的判定对象删除操作详细介绍

2024年07月05日 Python 我要评论
pyqt5类型判定主要是用来判定一个对象的类型,或者说是否继承自某个类相关api和应用场景如下主要有两个方法iswidgettype() 判断某个对象是都控件类型inherits() 一个对象是否继承

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才被删除

到此这篇关于pyqt5对象类型的判定,对象删除操作详细解读的文章就介绍到这了,更多相关pyqt5对象类型判定内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com