PyQt4 - Issue with deleting a QWidget from a QGridLayout

Vincent Vande Vyvre vincent.vande.vyvre at telenet.be
Tue Aug 19 18:32:44 EDT 2014


Le 20/08/2014 00:11, Alex Murray a écrit :
> Hi,
> I've discovered some very strange behaviour when trying to delete a 
> QWidget from a QGridLayout. The following code demonstrates this 
> behaviour:
> >>> from PyQt4 import QtGui
> >>> import sys
> >>> app = QtGui.QApplication(sys.argv)
> >>> grid_layout = QtGui.QGridLayout()
> >>> grid_layout.addWidget(QtGui.QWidget())
> >>> item = self.grid_layout.takeAt(0)
> >>> item.deleteLater()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'QWidgetItem' object has no attribute 'deleteLater'
> This makes no sense to me whatsoever. Firstly, why is it returning a 
> QWidgetItem when I inserted a QWidget to begin with? Secondly, every 
> Qt object derives from QObject, and deleteLater() is a method of 
> QObject, so that method should exist. Additional info:
> Python 2.7.6 (default, Mar 22 2014, 22:59:56)
> [GCC 4.8.2] on linux2
> using PyQt4
>
>
QLayout.takeAt() returns a QWidgetItem not the instance of the widget 
himself.

See: http://pyqt.sourceforge.net/Docs/PyQt4/qlayout.html#takeAt

You must use item.widget() to retrieve your widget instance.



More information about the Python-list mailing list