PyQt(三) 类继承结构图

2020-08-18  本文已影响0人  熊爸天下_56c7

一. 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文件中:

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自带的信号:

槽函数接收参数例:

  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, 是否是控件

应用场景 :

上一篇下一篇

猜你喜欢

热点阅读