1、父子对象的操作:
一个对象只能由一个父对象,设置两个父对象不会报错,以后设置的为主,覆盖先设置的。
.children()只有一级的所有子对象
.findChild()查找该级的符合该类型的一个子对象,结束。父对象必须是一个容器控件。
想查找obj0中是lable类的子对象:
label = QLabel()
label.setParent(obj0)
报错:要求参数1必须是QWidgt类型,具体控件的父对象必须是控件,这样才可将一个控件添加到另一个控件上。
不能存在该种类型的父子关系。
访问指定id的子类,通过多个条件限制
obj2.setParent(obj0)
obj2.setObjectName("2")
print(obj0.findChild(QObject, "2"))
.findChild()默认是递归查找,还可以找到间接子对象。
.findChildren()查找子对象,可输出全部的子对象(包括间接和直接子对象)
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QT学习")
self.resize(500, 500)
#self.QObject_name_property()
self.QObject对象父子关系()
def QObject_name_property(self):
# 读取字符串
with open("QObject.qss", "r") as f:
# 读取到的字符串全部应用到应用程序对象里的所有控件
qApp.setStyleSheet(f.read())
# 设置标签放置位置,给该对象上创建标签
label = QLabel(self)
label.setObjectName("notice")
label.setText("QT_learning")
label2 = QLabel(self)
label2.move(100, 100)
label2.setObjectName("notice")
# 通过设置属性完成不同的样式
label2.setProperty("notice_level", "warning")
label2.setText("learing good")
# 设置一个样式表,可以设置标签的样式
# label.setStyleSheet("font-size:10pt; color:red")
def QObject对象父子关系(self):
# 创建一个对象
obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj3 = QObject()
obj4 = QObject()
obj5 = QObject()
# label = QLabel()
# label.setParent(obj0)
print("obj0", obj0)
print("obj1", obj1)
print("obj2", obj2)
print("obj3", obj3)
print("obj4", obj4)
print("obj5", obj5)
obj1.setParent(obj0)
# 将obj2设置为obj1的父对象
#obj1.setParent(obj2)
obj2.setParent(obj0)
obj2.setObjectName("2")
obj3.setParent(obj1)
obj3.setObjectName("3")
obj4.setParent(obj2)
obj5.setParent(obj2)
# 测试一下4的父对象
# print(obj4.parent())
# 输出他的所有的 直接子对象,只有一级
# print(obj2.children())
# 指定某一个类型,或者类型元组,
# 查找子对象中的QLable类型或者其他类型,只需找到一个就可以结束
#print(obj0.findChild(QLabel))
print(obj0.findChild(QObject, "3", Qt.FindDirectChildrenOnly))