我試圖建立一個很酷的應用程序,但它似乎我缺乏一些知識。閱讀了大量的相關信息的互聯網和實例,但它並不能幫助: Understanding the "underlying C/C++ object has been deleted" errorPyQt4嵌套類 - 「RuntimeError:底層C/C++對象已被刪除」
好吧,這裏我做什麼:
我從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: underlying C/C++ object has been deleted
錯誤,就好像它從未在任何地方創建或綁定一樣。
看來我有一些設計缺陷。也許在一個文件或其他文件中使用不同的類是錯誤的想法?或者,我可能無法控制哪個小部件具有哪個父級以及佈局如何工作。
謝謝您的閱讀。祝你今天愉快!
看起來一切正常,只有'self.layout = QtGui.QHBoxLayout(line)'除外。 'line'從哪裏來?也許它應該是'self.layout = QtGui.QHBoxLayout(self)'。 – nymk 2013-02-24 11:31:35
另外,請勿使用'self.layout'作爲名稱。 'layout()'是小部件的常用方法。它返回小部件的當前佈局。你壓倒了它。 – Avaris 2013-02-24 11:52:43