美文网首页
PyQt(三) 类继承结构图

PyQt(三) 类继承结构图

作者: 熊爸天下_56c7 | 来源:发表于2020-08-18 23:20 被阅读0次

    一. PyQt5 类的继承结构图

    二. 如何获取一个类的父类和子类?

    使用QObject.mro()获取父类, 使用QObject.__subclasses__()获取子类

    from PyQt5.Qt import *
    
    class Window(QWidget):
      def __init__ (self):
        super().__init__()
        self.setWindowTitle("haha")
        self.resize(600,500)
        self.move(500,300)
        self.setip_ui()
      def setip_ui(self):
        self.object_learn()
      def object_learn(self):
        mros = QObject.mro()
        print("QObject的父类有")
        for mro in mros:
          print(mro)
        subs = QObject.__subclasses__()
        print("QObject的子类有")
        for sub in subs:
          print(sub)
    
    if __name__ == "__main__":
      import sys
      app = QApplication(sys.argv)
      window = Window()
      window.show()
      sys.exit(app.exec_())
    

    三. 万物始源QObject类

    1.属性与名称API

    API 功能 属性/方法 参数 返回值
    setObjectName("唯一名称") 设置对象的名称 方法 名称:字符串
    objectName() 获取对象的名称 方法 名称:字符串
    setProperty("属性名",值) 设置对象的属性 方法 属性名:字符串,值:任意
    property("属性名") 获取对象的某个属性的值 方法 属性名:字符串 值: 任意
    dynamicPropertyNames() 动态列举通过setPropety方法添加的属性 方法 列表

    应用场景:

    • 设置qss样式表时要用, (ID选择器, 属性选择器要用到对象名 属性名等)
    • 用于装饰器的属性于槽

    比如在一个qss文件中:

    QLabel#notice[level = "error"]{
      font-size : 30px;
      color : red
    }
    

    如果创建这样一个控件:

        lb1= QLabel(self)
        lb1.setText("熊爸")
        lb1.setObjectName("notice")
        lb1.setProperty("level","error")
    

    那么他的样式就会改变

    2. 父子对象的操作API

    API 功能 属性/方法 参数 返回值
    setParent(父对象) 设置对象的父对象 方法 父对象
    parent() 获取对象的父对象 方法 父对象
    children() 获取子对象列表(不含孙子) 方法 子对象列表
    findChild(参一,参二,参三) 寻找子孙的某个对象 方法 参1:对象类型,或对象类型元组,
    参2:对象名称,
    参3:查找选项:
    ①递归查找Qt.FindChildrenRecursively
    ②只查找子对象(不要孙子)Qt.FindDirectChildrenOnly
    符合要求的对象
    findChildren(参一,参二,参三) 同上,但会找全 方法 同上 符合要求的对象的列表

    应用场景:

    • 内存管理机制 : 构建父子关系,便于内存管理,生命周期管理
    • 窗口机制: 如果一个控件没有父控件,会被当成窗口处理. 如果一个控件有父对象,他就被包含在父对象里,,父控件会约束子控件

    3. 信号处理API

    信号与槽机制参见上一篇

    API 功能 参数 返回值
    obj.信号名.connect(槽) 将信号与槽建立联系 槽函数(槽函数可以接收obj传递的参数)
    例1:obj.destroyed.connect(func(obj)) 将destroyed 信号与槽函数建立联系 槽函数(槽函数可以接收obj做参数)
    例2: obj.objectNameChanged.connect(func(objName)) 将objectNameChanged信号与槽函数建立联系 槽函数(槽函数可以接收objName做参数)
    obj.信号名.disconnect(槽) 将信号与槽的联系断开 槽函数(槽函数可以接收obj传递的参数)
    obj.blockSignals(bool) 临时阻断信号与槽的连接 参数:True/False
    obj.signalsBlocked() 信号是否被阻断 bool,被阻断与否
    obj.receivers(信号) 连接该信号的槽的数量 返回槽函数的数量

    QObject自带的信号:

    • destroyed : 毁灭时触发的信号
    • objectNameChanged : 对象名改变时触发的信号

    槽函数接收参数例:

      def object_api(self):
        def haha(obj):
          print("haha")
          print(obj)
        self.obj = QObject()
        self.obj.destroyed.connect(haha)
    

    应用场景:

    • 监听信号, 响应用户行为
    • 信号与槽机制

    4. 类型判定

    API 功能 参数 返回值
    isWidgetType() 判断对象是否是控件 bool, 是否是控件
    isWindowType() 判断对象是否是窗体 bool, 是否是窗体
    inherits("类名") 判断对象是否是继承了某个类 字符串,类名 bool, 是否继承

    应用场景:

    • 控件的筛选

    5. 对象删除

    API 功能 参数 返回值
    deleteLater() 用此方法没有立刻删除对象
    而是向主消息循环发送了一个event
    下一次主消息循环才会触发这个事件
    才会销毁对象也会解除其和所有父对象关系
    这样我们可以在这个延迟时间内完成一些操作
    bool, 是否是控件

    应用场景 :

    • 删除控件 : 由于这个API会解除所有与父对象的关系, 而且可以删除对象, 所以经常用于删除不用的控件

    相关文章

      网友评论

          本文标题:PyQt(三) 类继承结构图

          本文链接:https://www.haomeiwen.com/subject/cskqjktx.html