我有两节课:
第一个(父类)在方法中实例化子类.
我正在尝试修改子类中的父对象属性. (这些对象是PyQT QWidget).
这是我的父母和孩子课程的开始:
家长:
class ParentClass(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ParentClass, self).__init__()
somevar=1200
self.ChildItem=ChildClass()
self.ChildItem.Start(somevar)
小孩:
class ChildClass(QtGui.QWidget):
def Start(self, var):
super(ChildClass, self).__init__(self)
self.parent().resize(var,var)
但是,即使没有错误,最后一行也不会产生任何结果.
我已经在几个示例中看到了super()可用于调用父方法,因此我认为这将是我的情况的解决方案.但是,我也无法使其正常工作.
我在理解super()时遇到很多麻烦,当我只想做一件简单的事情时,它总是会陷入复杂的概念,例如多重继承.
解决方法:
这里的问题与超级或继承无关.通过继承,父/子关系位于类之间.但是在您的示例中,ChildClass不继承ParentClass,因此不相关.
但是,Qt中还有另一种父/子关系,那就是实例之间.小部件的构造函数有一个参数,允许您传递对父对象(通常是另一个小部件实例)的引用.但是,该参数是可选的,因此,如果未显式设置该参数,则之后调用parent()只会返回None.
您的示例代码中的特定错误是,永远不会给孩子一个父母.
您的示例如下所示:
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)