介绍PyQt5里面父子关系相关的API,有setParent(parent)、parent()、children()、findChild(参数1,参数2,参数3)、findChildren(参数1,参数2,参数3)。

  • setParent(parent): 设置父对象,父对象只能设置一个
  • parent():获取父对象
  • children():获取所有子对象
# -*- coding: UTF-8 -*-
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.objectNameAndProperty()
        self.fuziguanxi()

    def fuziguanxi(self):
        obj1 = QObject()
        obj2 = QObject()
        obj1.setParent(obj2)  # 设置obj1的父对象为obj2

        print("obj1的地址", obj1)
        print("obj2的地址", obj2)
        print(obj1.parent())  # 输出

    '''   运行结果:证明obj1的父对象为obj2
        obj1的地址 <PyQt5.QtCore.QObject object at 0x000001ED77219940>
        obj2的地址 <PyQt5.QtCore.QObject object at 0x000001ED772199D0>
        <PyQt5.QtCore.QObject object at 0x000001ED772199D0>
    '''


# 方便在模板里进行调试
if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

只能有一个父对象,要是设置了多个父对象,以设置的最新的父对象为准

父子关系

在上面这幅图里面,A的子对象只有B和C,D\E\F和G\H不是A的子对象,你可以理解为孙子辈,而不是儿子辈。

在上面这幅图里面,D的父对象只有B,其他同一层也是类似的,A属于爷爷辈,而不是父辈。

  • findChild(参数1,参数2,参数3):寻找一个子对象

    获取指定名称和类型的子对象

    • 参数1:可以是指定一个类型(如QObject)、也可以是类型元组,如(QPushButton QLabel)
    • 参数2:指定对象的名称,此参数可以省略
    • 参数3:查找选项,使用FindChildrenRecursively,则查看对象的所有子对象(递归搜索),除了找儿子,也找孙子,这个是默认的参数。FindDirectChildrenOnly只查找直接子对象。
  • findChildren(参数1,参数2,参数3):寻找所有子对象


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/PyQt5Parent.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 21 日
如果觉得我的文章对你有用,请随意赞赏