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

标签 python pyside qtgui

我有两个类(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/

相关文章:

python - PySide 中缺少 QtGui.QIdentityProxyModel?

python - 使用 QAbstractTableModel 在 pyqt 中编辑表

python - 解析 whatsApp 对话日志

python - pandas 重新采样时间序列数据 - 同一列上有多个聚合函数?

python - 我应该在 PyPI 发布的包中测试不受支持的 Django 版本吗?

python - PyQt 中 QWidget 上的圆角

qt - 在 QDialog 中,调整窗口大小以包含 QTableView 的所有列

python - 使用 PyQtGraph,我的曲面图显示在窗口的左下角。

qt - 如何在 QCustomPlot 中隐藏网格并仅显示零线?

python - 如果生成器用于使用函数式 API 构建的多输入/输出 Keras 模型,则生成器应该返回什么?