如何构造以下图片的父子关系?
资源:Python-GUI-PyQ5总概述.xmind;QObject.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>]
'''