[PyQt] QTreeWidget setItemWidget dissapears after drag & drop

Taylor Carrasco crackerbunny at gmail.com
Fri Mar 5 03:09:42 GMT 2010


I'm trying to keep a widget put into a QTreeWidgetItem after a reparent
(drag and drop) using QTreeWidget.setItemWidget()

But the result, if you compile the following code - is that the widget
inside the QTreeWidgetItem disappears. Any idea why? What code would fix
this (repopulate the QTreeWidgetItem with the widget again?)



from PyQt4.QtCore import *
from PyQt4.QtGui import *


class InlineEditor (QWidget):
    _MUTE = 'MUTE'

    def __init__ (self, parent):
        QWidget.__init__ (self, parent)

        self.setAutoFillBackground (True)
        lo = QHBoxLayout()
        lo.setSpacing(4)

        self._cbFoo = QComboBox()
        for x in ["ABC", "DEF", "GHI", "JKL"]:
            self._cbFoo.addItem(x)

        self._leBar = QLineEdit('', self)
        lo.addWidget (self._cbFoo, 3)
        lo.addSpacing (5)
        lo.addWidget (QLabel ( 'Bar:'))
        lo.addWidget (self._leBar, 3)
        lo.addStretch (5)
        self.setLayout (lo)

class Form (QDialog):
    def __init__(self,parent=None):
        QDialog.__init__(self, parent)

        grid = QGridLayout ()
        tree = QTreeWidget ()

        # Here is the issue?
        tree.setDragDropMode(QAbstractItemView.InternalMove)

        tree.setColumnCount(3)

        for n in range (2):
            i = QTreeWidgetItem (tree) # create QTreeWidget the sub i
            i.setText (0, "first" + str (n)) # set the text of the first 0
            i.setText (1, "second")
            for m in range (2):
                j = QTreeWidgetItem(i)
                j.setText (0, "child first" + str (m))

        #b1 = QCheckBox("push me 0", tree) # this wont work w/ drag by
itself either
        #tree.setItemWidget (tree.topLevelItem(0).child(1), 1, b1)

        item = InlineEditor(tree) # deal with a combination of multiple controls
        tree.setItemWidget(tree.topLevelItem(0).child(1), 1, item)

        grid.addWidget (tree)
        self.setLayout (grid)

app = QApplication ([])
form = Form ()
form.show ()
app.exec_ ()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20100305/2b908f1f/attachment.html>


More information about the PyQt mailing list