019-QObject-对象的父子关系-API

如何构造以下图片的父子关系?

资源:Python-GUI-PyQ5总概述.xmindQObject.xmind


一、setParent(parent):设置父对象(并且父对象只能设置一个)

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()
        obj3 = QObject()
        obj4 = QObject()
        obj5 = QObject()

        print("obj0", obj2)
        print("obj1",obj1)
        print("obj2", obj2)
        print("obj3", obj2)
        print("obj4", obj2)
        print("obj5", obj2)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj3.setParent(obj1)
        obj4.setParent(obj2)
        obj5.setParent(obj2)

        print("obj4",obj4.parent())


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

#返回(后面是地址)
'''
obj0 <PyQt5.QtCore.QObject object at 0x000001CE80A5D310>
obj1 <PyQt5.QtCore.QObject object at 0x000001CE80A5D280>
obj2 <PyQt5.QtCore.QObject object at 0x000001CE80A5D310>
obj3 <PyQt5.QtCore.QObject object at 0x000001CE80A5D310>
obj4 <PyQt5.QtCore.QObject object at 0x000001CE80A5D310>
obj5 <PyQt5.QtCore.QObject object at 0x000001CE80A5D310>
obj4 <PyQt5.QtCore.QObject object at 0x000001CE80A5D310>
'''

二、children():获取所有直接子对象,parent()是获取父对象

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()
        obj3 = QObject()
        obj4 = QObject()
        obj5 = QObject()

        print("obj0", obj2)
        print("obj1",obj1)
        print("obj2", obj2)
        print("obj3", obj2)
        print("obj4", obj2)
        print("obj5", obj2)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj3.setParent(obj1)
        obj4.setParent(obj2)
        obj5.setParent(obj2)

        print("obj0",obj0.children())


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())


#返回
'''
obj0 <PyQt5.QtCore.QObject object at 0x000001EF87F7D310>
obj1 <PyQt5.QtCore.QObject object at 0x000001EF87F7D280>
obj2 <PyQt5.QtCore.QObject object at 0x000001EF87F7D310>
obj3 <PyQt5.QtCore.QObject object at 0x000001EF87F7D310>
obj4 <PyQt5.QtCore.QObject object at 0x000001EF87F7D310>
obj5 <PyQt5.QtCore.QObject object at 0x000001EF87F7D310>
obj0 [<PyQt5.QtCore.QObject object at 0x000001EF87F7D280>, <PyQt5.QtCore.QObject object at 0x000001EF87F7D310>]
'''

三、findChild(参数1,参数2,参数3):获取某一个指定名称和类型的子对象

(1)参数1:类型(QObject);类型元组(QPushButton,QLabel)

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()
        obj3 = QObject()
        obj4 = QObject()
        obj5 = QObject()
        label = QLabel()

        print("obj0", obj2)
        print("obj1",obj1)
        print("obj2", obj2)
        print("obj3", obj2)
        print("obj4", obj2)
        print("obj5", obj2)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj3.setParent(obj1)
        obj4.setParent(obj2)
        obj5.setParent(obj2)
        label.setParent(obj0)

        print(obj0.findChild(QLabel))  #子对象和父对象控件不一样,出错


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

#返回
'''
obj0 <PyQt5.QtCore.QObject object at 0x0000028D4268D310>
Traceback (most recent call last):
obj1 <PyQt5.QtCore.QObject object at 0x0000028D4268D280>
  File "C:/Users/Belinda/gui代码/pyqt5/018.py", line 41, in <module>
obj2 <PyQt5.QtCore.QObject object at 0x0000028D4268D310>
    window = Window()
obj3 <PyQt5.QtCore.QObject object at 0x0000028D4268D310>
  File "C:/Users/Belinda/gui代码/pyqt5/018.py", line 7, in __init__
obj4 <PyQt5.QtCore.QObject object at 0x0000028D4268D310>
    self.setup_ui()
obj5 <PyQt5.QtCore.QObject object at 0x0000028D4268D310>
  File "C:/Users/Belinda/gui代码/pyqt5/018.py", line 10, in setup_ui
    self.QObject对象的父子操作关系()
  File "C:/Users/Belinda/gui代码/pyqt5/018.py", line 33, in QObject对象的父子操作关系
    label.setParent(obj0)
TypeError: arguments did not match any overloaded call:
  setParent(self, QWidget): argument 1 has unexpected type 'QObject'
  setParent(self, QWidget, Union[Qt.WindowFlags, Qt.WindowType]): argument 1 has unexpected type 'QObject'
'''

(2)获取obj1对象地址

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()

        print("obj0", obj0)
        print("obj1",obj1)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj2.setObjectName("2")

        print(obj0.findChild(QObject))


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

#返回
'''
obj0 <PyQt5.QtCore.QObject object at 0x0000019AA23ED1F0>
obj1 <PyQt5.QtCore.QObject object at 0x0000019AA23ED280>
<PyQt5.QtCore.QObject object at 0x0000019AA23ED280>
'''

(3)参数2:填写名称,比如获取obj2地址

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()

        print("obj0", obj0)
        print("obj1",obj1)
        print("obj2",obj2)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj2.setObjectName("2")

        print(obj0.findChild(QObject,"2"))


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

#返回
'''
obj0 <PyQt5.QtCore.QObject object at 0x0000021ADC106280>
obj1 <PyQt5.QtCore.QObject object at 0x0000021ADC106310>
obj2 <PyQt5.QtCore.QObject object at 0x0000021ADC1063A0>
<PyQt5.QtCore.QObject object at 0x0000021ADC1063A0>
'''

(4)参数3:查找选项,Qt.FindDirecChildrenOnly是只查找直接子对象;Qt.FindChildrenRecursively是递归查找,一级一级往下查找

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()
        obj3 = QObject()

        print("obj0", obj0)
        print("obj1",obj1)
        print("obj2",obj2)
        print("obj3", obj3)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj3.setParent(obj1)
        obj3.setObjectName("3")

        print(obj0.findChild(QObject,"3",Qt.FindDirectChildrenOnly))


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

#返回
'''
obj0 <PyQt5.QtCore.QObject object at 0x000001447A48D1F0>
obj1 <PyQt5.QtCore.QObject object at 0x000001447A48D280>
obj2 <PyQt5.QtCore.QObject object at 0x000001447A48D310>
obj3 <PyQt5.QtCore.QObject object at 0x000001447A48D3A0>
None
'''

四、findChildren(参数1,参数2,参数3):获取某多个指定名称和类型的子对象,参数1、参数2、参数3与以上相同

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):
        obj0=QObject()
        obj1=QObject()
        obj2 = QObject()
        obj3 = QObject()

        print("obj0", obj0)
        print("obj1",obj1)
        print("obj2",obj2)
        print("obj3", obj3)

        obj1.setParent(obj0)
        obj2.setParent(obj0)
        obj3.setParent(obj1)
        obj3.setObjectName("3")

        print(obj0.findChildren(QObject))


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())


#返回
'''
obj0 <PyQt5.QtCore.QObject object at 0x0000026A356DD1F0>
obj1 <PyQt5.QtCore.QObject object at 0x0000026A356DD280>
obj2 <PyQt5.QtCore.QObject object at 0x0000026A356DD310>
obj3 <PyQt5.QtCore.QObject object at 0x0000026A356DD3A0>
[<PyQt5.QtCore.QObject object at 0x0000026A356DD280>, <PyQt5.QtCore.QObject object at 0x0000026A356DD3A0>, <PyQt5.QtCore.QObject object at 0x0000026A356DD310>]
'''

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值