jijiz | Bonjour à tous,
J'ai cette erreur en python que je ne comprends pas :
RuntimeError: underlying C/C++ object has been deleted
Appel de l'appli principale :
Code :
- from dragwidget import *
- from PyQt4 import QtCore, QtGui
- import sys
- if __name__ == "__main__":
- #Q_INIT_RESOURCE(draggableicons);
-
- app = QtGui.QApplication(sys.argv)
- :jap: mainWidget = QtGui.QWidget
- horizontalLayout = QtGui.QHBoxLayout
-
- horizontalLayout.addWidget(DragWidget(mainWidget))
- #horizontalLayout.addWidget(dragwidget(QtGui.QFrame))
- mainWidget.setLayout(horizontalLayout);
- mainWidget.setWindowTitle(QtCore.QObject.tr("Draggable Icons" ))
- mainWidget.show();
- sys.exit(app.exec_())
|
Et voici l'erreur :
Traceback (most recent call last):
File "D:\WorkSpace\DragAndDrop\src\main.py", line 14, in ?
horizontalLayout.addWidget(DragWidget(mainWidget))
File "D:\WorkSpace\DragAndDrop\src\dragwidget.py", line 7, in __init__
self.setMinimumSize(200, 200)
RuntimeError: underlying C/C++ object has been deleted
Code du widget :
Code :
- from PyQt4 import QtGui, QtCore
- # Questions :
- # A t on besoin de faire QtCore.QPoint() pour creer un QPoint, ou peut on directement appeler QPoint?
- class DragWidget(QtGui.QFrame):
- def __init__(self, parent):
- self.setMinimumSize(200, 200)
- self.setMinimumSize()
- self.setAcceptDrops(True)
-
-
- boatIcon = QtGui.QLabel(self)
- boatIcon.setPixMap(QtGui.QPixmap("./image.png" ))
- boatIcon.move(20,20)
- boatIcon.show()
- boatIcon.setAttribute(QtCore.Qt.WA_DeleteOnClose)
-
- def dragEnterEvent(self, event):
- if (event.mimeData().hasFormat("application/x-dnditemdata" )):
- if (event.source()==self):
- event.setDropAction(QtCore.Qt.MoveAction)
- event.accept()
- else:
- event.acceptProposedAction()
- else:
- event.ignore()
- def dropEvent(self, event):
- if (event.mimeData().hasFormat("application/x-dnditemdata" )):
- itemData = event.mimeData().data("application/x-dnditemdata" )
- dataStream = QtGui.QFrame.QDataStream(itemData, QtCore.QIODevice.ReadOnly)
- # pixmap = QtGui.QPixmap(item.data(QtCore.Qt.DecorationRole))
- pixmap = QtGui.QPixmap
- offset = QtCore.QPoint()
-
-
-
- dataStream >> pixmap >> offset
-
- newIcon = QtGui.QLabel(self)
- newIcon.setPixmap(pixmap)
- newIcon.move(event.pos() - offset)
- newIcon.show()
- newIcon.setAttribute(QtCore.Qt.WA_deleteOnClose)
-
- if (event.source() == self):
- event.setDropAction(QtCore.Qt.MoveAction)
- event.accept()
- else:
- event.acceptProposedAction()
- else:
- event.ignore()
-
- def mousePressEvent(self,event):
- #child = static_cast<QtGui.QLabel>(QFrame.childAt(event.pos()))
- child = QtGui.QFrame.childAt(event.pos())
- if (child == False):
- return
-
- pixmap = child.pixmap()
- itemData = QtCore.QByteArray()
- dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.writeOnly)
- dataStream << pixmap << QtCore.QPoint(event.pos() - child.pos())
-
- mimeData = QtCore.QMimeData()
- mimeData.setData("application/x-dnditemdata", itemData)
-
- drag = QtGui.QDrag(self)
- drag.setMimeData(mimeData)
- drag.setPixMap(pixmap)
- drag.setHotSpot(event.pos() - child.pos())
-
- tempPixmap = QtGui.QPixmap
- painter = QtGui.QPainter
- painter.begin(tempPixmap)
-
- painter.fillRect(pixmap.rect(), QtGui.QColor(127, 127, 127, 127))
- painter.end()
-
- child.setPixMap(tempPixmap)
-
- if (drag.start(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction):
- child.close()
- else:
- child.show()
- child.setPixMap(pixmap)
|
Message édité par jijiz le 23-05-2007 à 15:21:34
|