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

PyQt5 是一个流行的 GUI 库,用于创建桌面应用程序和用户界面,本文给大家介绍Python 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才被删除

到此这篇关于PyQt5对象类型的判定,对象删除操作详细解读的文章就介绍到这了,更多相关PyQt5对象类型判定内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持vb.net教程C#教程python教程SQL教程access 2010教程xin3721自学网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5.QtCore是Python中的一个模块,它提供了许多与Qt核心功能相关的类和方法。以下是一些PyQt5.QtCore中常用的功能: 1. 信号与槽机制:PyQt5.QtCore中的QObject类提供了信号与槽机制,用于实现对象之间的通信。信号是一种特殊的函数,当特定事件发生时会被发射,而槽是与信号关联的函数,会在信号发射时被调用。 2. 定时器:PyQt5.QtCore中的QTimer类用于实现定时器功能。它可以定时触发特定的事件,比如在一定时间间隔内执行某个函数。 3. 对象模型:PyQt5.QtCore中的QObject类是所有Qt对象的基类。它提供了对象的属性、信号与槽等功能,是Qt框架中重要的基础。 4. 事件处理:PyQt5.QtCore中的QEvent类和QEventLoop类用于处理事件。事件是指用户与应用程序之间的交互,比如鼠标点击、键盘输入等。通过重写相应的事件处理函数,可以实现对事件的响应。 5. 多线程支持:PyQt5.QtCore中的QThread类和QMutex类等提供了多线程编程的支持。多线程能够提高程序的性能和响应速度,通过合理地使用多线程,可以使应用程序更加流畅和高效。 6. 文件和IO操作PyQt5.QtCore中的QFile类和QIODevice类等用于文件和IO操作。它们提供了读写文件、网络通信等功能,方便进行数据的读取和存储。 总之,PyQt5.QtCore是PyQt5中的核心模块,提供了许多与Qt核心功能相关的类和方法,方便开发者进行GUI应用程序的开发和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值