编程语言
首页 > 编程语言> > python-parent()或super()获取父对象?

python-parent()或super()获取父对象?

作者:互联网

我有两节课:

第一个(父类)在方法中实例化子类.
我正在尝试修改子类中的父对象属性. (这些对象是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)

标签:qtgui,pyside,python
来源: https://codeday.me/bug/20191120/2041011.html