<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Thank you for the replies Vincent. Did you also try to bring back the items from the bottom list to the top list? I tried both with python 2.7.3 and 3.3 and the behavior is the same (taht is crash). Thanks for your help!<br><br><div>> From: pyqt-request@riverbankcomputing.com<br>> Subject: PyQt Digest, Vol 119, Issue 25<br>> To: pyqt@riverbankcomputing.com<br>> Date: Tue, 24 Jun 2014 12:00:01 +0100<br>> <br>> Send PyQt mailing list submissions to<br>>   pyqt@riverbankcomputing.com<br>> <br>> To subscribe or unsubscribe via the World Wide Web, visit<br>>        http://www.riverbankcomputing.com/mailman/listinfo/pyqt<br>> or, via email, send a message with subject or body 'help' to<br>>        pyqt-request@riverbankcomputing.com<br>> <br>> You can reach the person managing the list at<br>>    pyqt-owner@riverbankcomputing.com<br>> <br>> When replying, please edit your Subject line so it is more specific<br>> than "Re: Contents of PyQt digest..."<br>> <br>> <br>> Today's Topics:<br>> <br>>    1. Drag and Drop of subclassed QListWidgetItem (Massi)<br>>    2. Re: Drag and Drop of subclassed QListWidgetItem<br>>       (Vincent Vande Vyvre)<br>>    3. Re: Drag and Drop of subclassed QListWidgetItem<br>>       (Vincent Vande Vyvre)<br>> <br>> <br>> ----------------------------------------------------------------------<br>> <br>> Message: 1<br>> Date: Tue, 24 Jun 2014 10:44:01 +0200<br>> From: "Massi" <massi_srb@msn.com><br>> To: <pyqt@riverbankcomputing.com><br>> Subject: [PyQt] Drag and Drop of subclassed QListWidgetItem<br>> Message-ID: <DUB111-DS30B502A7A96A835D1A32289C1E0@phx.gbl><br>> Content-Type: text/plain; charset="iso-8859-1"<br>> <br>> Hi everyone,<br>> <br>> I'm encountering some poblems trying to implement drag and drop for a custom QListWidgetItem. Here is some example code:<br>> <br>> from PyQt4 import QtGui, QtCore<br>> import sys, os<br>> <br>> class MyListWidgetItem(QtGui.QListWidgetItem):      <br>>     def __init__(self, label, data, parent=None):<br>>         super(QtGui.QListWidgetItem, self).__init__(label, parent=parent)<br>>         self.data = data<br>> <br>>     def GetData(self):<br>>         return self.data<br>> <br>> class MyListWidget(QtGui.QListWidget):<br>>     def __init__(self, type, parent=None):<br>>         super(MyListWidget, self).__init__(parent)<br>>         self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)<br>>         self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)<br>>         self.setAcceptDrops(True)<br>>         self.viewport().setAcceptDrops(True)<br>>         self.setDropIndicatorShown(True)<br>> <br>>     def startDrag(self, supportedActions):<br>>         drag = QtGui.QDrag(self)<br>>         t = [i.GetData() for i in self.selectedItems()]<br>>         mimeData = self.model().mimeData(self.selectedIndexes())<br>>         mimeData.setText(str(t))<br>>         drag.setMimeData(mimeData)<br>>         if drag.start(QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction:<br>>             for item in self.selectedItems():<br>>                 self.takeItem(self.row(item))<br>>                 <br>>     def dragEnterEvent(self, event):<br>>         if event.mimeData().hasUrls():<br>>             event.ignore()<br>>         else:<br>>             event.accept()<br>>             <br>>     def dragMoveEvent(self, event):<br>>         if event.mimeData().hasUrls():<br>>             event.ignore()<br>>         else:<br>>             event.accept()<br>>             <br>>     def dropEvent(self, event):<br>>         if event.mimeData().hasUrls():<br>>             event.ignore()<br>>         if isinstance(event.source(), MyListWidget):<br>>             event.setDropAction(QtCore.Qt.MoveAction)<br>>             super(MyListWidget, self).dropEvent(event)<br>>         else:<br>>             event.ignore()<br>>             <br>>     def dropMimeData(self, index, mimedata, action):<br>>         super(MyListWidget, self).dropMimeData(index, mimedata, action)<br>>         return True<br>> <br>> class Test(QtGui.QMainWindow):<br>>     def __init__(self):<br>>         super(QtGui.QMainWindow,self).__init__()<br>>         myQWidget = QtGui.QWidget()<br>>         myBoxLayout = QtGui.QVBoxLayout()<br>>         myQWidget.setLayout(myBoxLayout)<br>>         self.setCentralWidget(myQWidget)<br>> <br>>         self.listWidgetA = MyListWidget(self)<br>>         self.listWidgetB = MyListWidget(self)<br>> <br>>         for i in range(5):<br>>             listItemAInstance = MyListWidgetItem(str(i), i, parent=self.listWidgetA)<br>> <br>>         myBoxLayout.addWidget(self.listWidgetA)      <br>>         myBoxLayout.addWidget(self.listWidgetB)   <br>> <br>> if __name__ == '__main__':<br>>     app = QtGui.QApplication(sys.argv)<br>>     dialog_1 = Test()<br>>     dialog_1.show()<br>>     dialog_1.resize(480,320)<br>>     sys.exit(app.exec_())<br>> <br>> My custom class MyListWidgetItem has a 'data' field which in my real program holds some information related to the item. If you run the code and try to drag and drop items from the top list to the bottom one everything works, but if you then try to bring them back to the top list you get this error:<br>> <br>> Traceback (most recent call last):<br>>   File "C:\Users\Massi\Desktop\t.py", line 23, in startDrag<br>>     t = [i.GetData() for i in self.selectedItems()]<br>> AttributeError: 'QListWidgetItem' object has no attribute 'GetData'<br>> <br>> It seems pretty clear that the default drag and drop behaviour ignores that the list items have been subclassed, so I wonder which is the best to deal with this situation. Any help is really appreciated.<br>> Thanks in advance!<br>> -------------- next part --------------<br>> An HTML attachment was scrubbed...<br>> URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20140624/8926cfb7/attachment-0001.html><br>> <br>> ------------------------------<br>> <br>> Message: 2<br>> Date: Tue, 24 Jun 2014 12:24:43 +0200<br>> From: Vincent Vande Vyvre <vincent.vandevyvre@swing.be><br>> To: pyqt@riverbankcomputing.com<br>> Subject: Re: [PyQt] Drag and Drop of subclassed QListWidgetItem<br>> Message-ID: <53A951EB.4070306@swing.be><br>> Content-Type: text/plain; charset=UTF-8; format=flowed<br>> <br>> Le 24/06/2014 10:44, Massi a écrit :<br>> > Hi everyone,<br>> > I'm encountering some poblems trying to implement drag and drop for a <br>> > custom QListWidgetItem. Here is some example code:<br>> > from PyQt4 import QtGui, QtCore<br>> > import sys, os<br>> > class MyListWidgetItem(QtGui.QListWidgetItem):<br>> >     def __init__(self, label, data, parent=None):<br>> >         super(QtGui.QListWidgetItem, self).__init__(label, parent=parent)<br>> >         self.data = data<br>> >     def GetData(self):<br>> >         return self.data<br>> > class MyListWidget(QtGui.QListWidget):<br>> >     def __init__(self, type, parent=None):<br>> >         super(MyListWidget, self).__init__(parent)<br>> > self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)<br>> > self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)<br>> >         self.setAcceptDrops(True)<br>> >         self.viewport().setAcceptDrops(True)<br>> >         self.setDropIndicatorShown(True)<br>> >     def startDrag(self, supportedActions):<br>> >         drag = QtGui.QDrag(self)<br>> >         t = [i.GetData() for i in self.selectedItems()]<br>> >         mimeData = self.model().mimeData(self.selectedIndexes())<br>> >         mimeData.setText(str(t))<br>> >         drag.setMimeData(mimeData)<br>> >         if drag.start(QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction:<br>> >             for item in self.selectedItems():<br>> >                 self.takeItem(self.row(item))<br>> >     def dragEnterEvent(self, event):<br>> >         if event.mimeData().hasUrls():<br>> >             event.ignore()<br>> >         else:<br>> >             event.accept()<br>> >     def dragMoveEvent(self, event):<br>> >         if event.mimeData().hasUrls():<br>> >             event.ignore()<br>> >         else:<br>> >             event.accept()<br>> >     def dropEvent(self, event):<br>> >         if event.mimeData().hasUrls():<br>> >             event.ignore()<br>> >         if isinstance(event.source(), MyListWidget):<br>> >             event.setDropAction(QtCore.Qt.MoveAction)<br>> >             super(MyListWidget, self).dropEvent(event)<br>> >         else:<br>> >             event.ignore()<br>> >     def dropMimeData(self, index, mimedata, action):<br>> >         super(MyListWidget, self).dropMimeData(index, mimedata, action)<br>> >         return True<br>> > class Test(QtGui.QMainWindow):<br>> >     def __init__(self):<br>> >         super(QtGui.QMainWindow,self).__init__()<br>> >         myQWidget = QtGui.QWidget()<br>> >         myBoxLayout = QtGui.QVBoxLayout()<br>> >         myQWidget.setLayout(myBoxLayout)<br>> >         self.setCentralWidget(myQWidget)<br>> >         self.listWidgetA = MyListWidget(self)<br>> >         self.listWidgetB = MyListWidget(self)<br>> >         for i in range(5):<br>> >             listItemAInstance = MyListWidgetItem(str(i), i, <br>> > parent=self.listWidgetA)<br>> >         myBoxLayout.addWidget(self.listWidgetA)<br>> >         myBoxLayout.addWidget(self.listWidgetB)<br>> > if __name__ == '__main__':<br>> >     app = QtGui.QApplication(sys.argv)<br>> >     dialog_1 = Test()<br>> >     dialog_1.show()<br>> >     dialog_1.resize(480,320)<br>> >     sys.exit(app.exec_())<br>> > My custom class MyListWidgetItem has a 'data' field which in my real <br>> > program holds some information related to the item. If you run the <br>> > code and try to drag and drop items from the top list to the bottom <br>> > one everything works, but if you then try to bring them back to the <br>> > top list you get this error:<br>> > Traceback (most recent call last):<br>> >   File "C:\Users\Massi\Desktop\t.py", line 23, in startDrag<br>> >     t = [i.GetData() for i in self.selectedItems()]<br>> > AttributeError: 'QListWidgetItem' object has no attribute 'GetData'<br>> > It seems pretty clear that the default drag and drop behaviour ignores <br>> > that the list items have been subclassed, so I wonder which is the <br>> > best to deal with this situation. Any help is really appreciated.<br>> > Thanks in advance!<br>> ><br>> ><br>> > _______________________________________________<br>> > PyQt mailing list    PyQt@riverbankcomputing.com<br>> > http://www.riverbankcomputing.com/mailman/listinfo/pyqt<br>> Works fine for me.<br>> <br>> Platform Linux-3.2.0-48-generic-pae-i686-with-Ubuntu-12.04-precise<br>> Qt            4.8.1<br>> Python     2.7.3<br>> PyQt        4.9.1<br>> Sip            4.13.2<br>> <br>> -- <br>> Vincent V.V.<br>> Oqapy <https://launchpad.net/oqapy> . Qarte <br>> <https://launchpad.net/qarte> . PaQager <https://launchpad.net/paqager><br>> <br>> <br>> ------------------------------<br>> <br>> Message: 3<br>> Date: Tue, 24 Jun 2014 12:34:01 +0200<br>> From: Vincent Vande Vyvre <vincent.vandevyvre@swing.be><br>> To: pyqt@riverbankcomputing.com<br>> Subject: Re: [PyQt] Drag and Drop of subclassed QListWidgetItem<br>> Message-ID: <53A95419.4030603@swing.be><br>> Content-Type: text/plain; charset=UTF-8; format=flowed<br>> <br>> Le 24/06/2014 12:24, Vincent Vande Vyvre a écrit :<br>> > Le 24/06/2014 10:44, Massi a écrit :<br>> >> Hi everyone,<br>> >> I'm encountering some poblems trying to implement drag and drop for a <br>> >> custom ...<br>> > Works fine for me.<br>> ><br>> > Platform Linux-3.2.0-48-generic-pae-i686-with-Ubuntu-12.04-precise<br>> > Qt            4.8.1<br>> > Python     2.7.3<br>> > PyQt        4.9.1<br>> > Sip            4.13.2<br>> ><br>> Works too with Python 3<br>> <br>> Python        3.2.3<br>> Qt            4.8.1<br>> PyQt        4.10.2<br>> Sip            4.14.7<br>> <br>> -- <br>> Vincent V.V.<br>> Oqapy <https://launchpad.net/oqapy> . Qarte <br>> <https://launchpad.net/qarte> . PaQager <https://launchpad.net/paqager><br>> <br>> <br>> ------------------------------<br>> <br>> Subject: Digest Footer<br>> <br>> _______________________________________________<br>> PyQt mailing list<br>> PyQt@riverbankcomputing.com<br>> http://www.riverbankcomputing.com/mailman/listinfo/pyqt<br>> <br>> ------------------------------<br>> <br>> End of PyQt Digest, Vol 119, Issue 25<br>> *************************************<br></div>                                           </div></body>
</html>