parent() 或 super() 以获得 parent object?
parent() or super() to get a parent object?
我有两个 classes :
第一个(parentclass)在方法中实例化childclass。
我正在尝试修改 child class 中的 parent objects 属性。 (这些 objects 是 PyQT QWidget
s)。
这是我的 Parent 和 Child classes 的开头:
Parent :
class ParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ParentClass, self).__init__()
somevar=1200
self.ChildItem=ChildClass()
self.ChildItem.Start(somevar)
Child :
class ChildClass(QtGui.QWidget):
def Start(self, var):
super(ChildClass, self).__init__(self)
self.parent().resize(var,var)
然而,即使我没有错误,最后一行也没有产生任何结果。
我在几个示例中看到 super()
可用于调用 parent 方法,因此我认为这将是我的案例的解决方案。但是,我也无法让它工作。
我在理解super()
时遇到了很多麻烦,当我只想做一件简单的事情时,它总是陷入复杂的概念,例如多重继承。
Qt 术语中的父项不是 python 术语中的父项,from docs:
Returns a pointer to the parent object.
QObjects organize themselves in object trees. When you create a QObject with another object as parent, the object will automatically add itself to the parent's children() list.
但是这里的parent在Qt术语中是这个对象所属的一个对象,这个跟python继承没有关系
对于python继承你需要super
:
super(ParentClass, self).method()
在单继承的情况下这是微不足道的。
这里的问题与super
或继承无关。有了继承,parent/child关系就是类。但在您的示例中,ChildClass
不会继承 ParentClass
,因此这无关紧要。
不过,在 Qt 中还有另一种 parent/child 关系,那就是 实例 之间的关系。小部件的构造函数有一个参数,允许您传入对 parent object(通常是另一个小部件实例)的引用。但是,该参数是可选的,因此如果您没有显式设置它,之后调用 parent()
只会 return None
.
您的示例代码中的具体错误是 child 从未被赋予 parent。
您的示例应如下所示:
class ParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ParentClass, self).__init__()
# pass in "self" as the parent
self.ChildItem = ChildClass(self)
self.ChildItem.Start(1200)
class ChildClass(QtGui.QWidget):
def Start(self, var):
self.parent().resize(var, var)
我有两个 classes :
第一个(parentclass)在方法中实例化childclass。
我正在尝试修改 child class 中的 parent objects 属性。 (这些 objects 是 PyQT QWidget
s)。
这是我的 Parent 和 Child classes 的开头:
Parent :
class ParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ParentClass, self).__init__()
somevar=1200
self.ChildItem=ChildClass()
self.ChildItem.Start(somevar)
Child :
class ChildClass(QtGui.QWidget):
def Start(self, var):
super(ChildClass, self).__init__(self)
self.parent().resize(var,var)
然而,即使我没有错误,最后一行也没有产生任何结果。
我在几个示例中看到 super()
可用于调用 parent 方法,因此我认为这将是我的案例的解决方案。但是,我也无法让它工作。
我在理解super()
时遇到了很多麻烦,当我只想做一件简单的事情时,它总是陷入复杂的概念,例如多重继承。
Qt 术语中的父项不是 python 术语中的父项,from docs:
Returns a pointer to the parent object.
QObjects organize themselves in object trees. When you create a QObject with another object as parent, the object will automatically add itself to the parent's children() list.
但是这里的parent在Qt术语中是这个对象所属的一个对象,这个跟python继承没有关系
对于python继承你需要super
:
super(ParentClass, self).method()
在单继承的情况下这是微不足道的。
这里的问题与super
或继承无关。有了继承,parent/child关系就是类。但在您的示例中,ChildClass
不会继承 ParentClass
,因此这无关紧要。
不过,在 Qt 中还有另一种 parent/child 关系,那就是 实例 之间的关系。小部件的构造函数有一个参数,允许您传入对 parent object(通常是另一个小部件实例)的引用。但是,该参数是可选的,因此如果您没有显式设置它,之后调用 parent()
只会 return None
.
您的示例代码中的具体错误是 child 从未被赋予 parent。
您的示例应如下所示:
class ParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ParentClass, self).__init__()
# pass in "self" as the parent
self.ChildItem = ChildClass(self)
self.ChildItem.Start(1200)
class ChildClass(QtGui.QWidget):
def Start(self, var):
self.parent().resize(var, var)