gpt4 book ai didi

python - PyQt4 嵌套类 - "RuntimeError: underlying C/C++ object has been deleted"

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:39 25 4
gpt4 key购买 nike

我正在尝试构建一个很酷的应用程序,但似乎我缺乏一些知识。在互联网上阅读了大量信息和示例,但没有帮助: Understanding the "underlying C/C++ object has been deleted" error

<小时/>

好的,这就是我所做的:

我从我的 main.py 创建了中央小部件,它工作正常,我没有将其完整发布在这里:

self.rw = ReportWidget()
self.setCentralWidget(self.rw)

这是我的中央小部件 - report.py:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt4 import QtGui, QtCore

class ReportWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(ReportWidget, self).__init__(parent)
self.setup_ui()

def setup_ui(self):
report = QtGui.QVBoxLayout(self)
report.setAlignment(QtCore.Qt.AlignTop)

head = QtGui.QHBoxLayout()
add_label = QtGui.QLabel(u"Add")
head.addWidget(add_label)

report.addLayout(head)

area = QtGui.QScrollArea()
area.setWidgetResizable(True)
area.setEnabled(True)
layout = QtGui.QVBoxLayout()
layout.setAlignment(QtCore.Qt.AlignTop)
widget = QtGui.QWidget()
widget.setLayout(layout)
area.setWidget(widget)
report.addWidget(area)

self.s = layout

# trying to create first line:
first_line = Line(self)
self.s.addWidget(first_line)
first_line.set_controls(True, False)

head = QtGui.QHBoxLayout()
ok = QtGui.QPushButton(u"Calculate")

head.addWidget(ok)
report.addLayout(head)

从同一文件继续report.py:

class Line(QtGui.QWidget):
def __init__(self, parent=None):
super(Line, self).__init__(parent)
self.setup_ui(parent)

def setup_ui(self, parent):
add_button = QtGui.QPushButton()
add_button.setObjectName("add_button")

self.add_button = add_button
self.layout = QtGui.QHBoxLayout(line)
self.layout.addWidget(add_button)

def set_controls(self, add_button=True, remove_button=True):
self.add_button.setEnabled(add_button)

因此,运行main.py会在我尝试setEnabled<的最后一段代码上引发RuntimeError:底层C/C++对象已被删除错误 新按钮的参数,就好像它从未在任何地方创建或绑定(bind)一样。

看来我有一些设计缺陷。也许在一个文件中包含不同的类是错误的想法,否则?或者也许我不太控制哪个小部件有哪个父级以及布局如何工作。

<小时/>

感谢您的阅读。祝你有美好的一天!

最佳答案

感谢所有尝试回答的人!不幸的是没有人说我写了一堆废话! *微笑*

我的line已经是一个小部件,我不需要在其内部创建它自己。我所要做的就是在 setup_ui 中创建布局并向其中添加小部件。最后看起来像:

class Line(QtGui.QWidget):
def __init__(self, parent=None):
super(Line, self).__init__(parent)
self.setup_ui(parent)

def setup_ui(self, parent):
line = QtGui.QHBoxLayout(self)

add_button = QtGui.QPushButton()
add_button.setObjectName("add_button")

line.addWidget(add_button)

# to get reference from outside
self.add_button = add_button

def set_controls(self, add_button=True, remove_button=True):
self.add_button.setEnabled(add_button)

特别感谢nymkAvaris !

关于python - PyQt4 嵌套类 - "RuntimeError: underlying C/C++ object has been deleted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15051090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com