我有两个类(class):
第一个(父类)在方法中实例化子类。
我正在尝试修改子类中的父对象属性。 (这些对象是 PyQT QWidget
s)。
这是我的父子类(class)的开始:
父级:
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()
可用于调用父方法,因此我认为这将是我的案例的解决方案。但是,我也无法让它工作。
我在理解super()
时遇到了很多麻烦,当我只想做一件简单的事情时,它总是会涉及复杂的概念,例如多重继承。
最佳答案
这里的问题与 super
或继承无关。通过继承,父/子关系在类 之间。但在您的示例中,ChildClass
不继承 ParentClass
,因此这不相关。
不过,在 Qt 中还有另一种父/子关系,即 实例 之间的关系。小部件的构造函数有一个参数,允许您传入对父对象(通常是另一个小部件实例)的引用。但是,该参数是可选的,因此如果您没有显式设置它,之后调用 parent()
只会返回 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)
关于python - parent() 或 super() 获取父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241966/