[Erreur python]underlying C/C++ object has been deleted [ Résolu ]

underlying C/C++ object has been deleted [ Résolu ] [Erreur python] - Python - Programmation

Marsh Posté le 18-04-2007 à 09:29:38    

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 :
  1. from dragwidget import *
  2. from PyQt4 import QtCore, QtGui
  3. import sys
  4. if __name__ == "__main__":
  5.     #Q_INIT_RESOURCE(draggableicons);
  6.    
  7.     app = QtGui.QApplication(sys.argv)
  8. :jap:     mainWidget = QtGui.QWidget
  9.     horizontalLayout = QtGui.QHBoxLayout
  10.    
  11.     horizontalLayout.addWidget(DragWidget(mainWidget))
  12.     #horizontalLayout.addWidget(dragwidget(QtGui.QFrame))
  13.     mainWidget.setLayout(horizontalLayout);
  14.     mainWidget.setWindowTitle(QtCore.QObject.tr("Draggable Icons" ))
  15.     mainWidget.show();
  16.     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 :
  1. from PyQt4 import QtGui, QtCore
  2. # Questions :
  3. # A t on besoin de faire QtCore.QPoint() pour creer un QPoint, ou peut on directement appeler QPoint?
  4. class DragWidget(QtGui.QFrame):
  5.     def __init__(self, parent):
  6.         self.setMinimumSize(200, 200)
  7.         self.setMinimumSize()
  8.         self.setAcceptDrops(True)
  9.        
  10.        
  11.         boatIcon = QtGui.QLabel(self)
  12.         boatIcon.setPixMap(QtGui.QPixmap("./image.png" ))
  13.         boatIcon.move(20,20)
  14.         boatIcon.show()
  15.         boatIcon.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  16.        
  17.     def dragEnterEvent(self, event):
  18.         if (event.mimeData().hasFormat("application/x-dnditemdata" )):
  19.             if (event.source()==self):
  20.                 event.setDropAction(QtCore.Qt.MoveAction)
  21.                 event.accept()
  22.             else:
  23.                 event.acceptProposedAction()
  24.         else:
  25.             event.ignore()
  26.     def dropEvent(self, event):
  27.         if (event.mimeData().hasFormat("application/x-dnditemdata" )):
  28.             itemData = event.mimeData().data("application/x-dnditemdata" )
  29.             dataStream = QtGui.QFrame.QDataStream(itemData, QtCore.QIODevice.ReadOnly)
  30.             # pixmap = QtGui.QPixmap(item.data(QtCore.Qt.DecorationRole))
  31.             pixmap = QtGui.QPixmap
  32.             offset = QtCore.QPoint()
  33.        
  34.            
  35.            
  36.             dataStream >> pixmap >> offset
  37.            
  38.             newIcon = QtGui.QLabel(self)
  39.             newIcon.setPixmap(pixmap)
  40.             newIcon.move(event.pos() - offset)
  41.             newIcon.show()
  42.             newIcon.setAttribute(QtCore.Qt.WA_deleteOnClose)
  43.            
  44.             if (event.source() == self):
  45.                 event.setDropAction(QtCore.Qt.MoveAction)
  46.                 event.accept()
  47.             else:
  48.                 event.acceptProposedAction()
  49.         else:
  50.             event.ignore()
  51.            
  52.     def mousePressEvent(self,event):
  53.         #child = static_cast<QtGui.QLabel>(QFrame.childAt(event.pos()))
  54.         child = QtGui.QFrame.childAt(event.pos())
  55.         if (child == False):
  56.             return
  57.        
  58.         pixmap = child.pixmap()
  59.         itemData = QtCore.QByteArray()   
  60.         dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.writeOnly)
  61.         dataStream << pixmap << QtCore.QPoint(event.pos() - child.pos())
  62.        
  63.         mimeData = QtCore.QMimeData()
  64.         mimeData.setData("application/x-dnditemdata", itemData)
  65.        
  66.         drag = QtGui.QDrag(self)
  67.         drag.setMimeData(mimeData)
  68.         drag.setPixMap(pixmap)
  69.         drag.setHotSpot(event.pos() - child.pos())
  70.        
  71.         tempPixmap = QtGui.QPixmap
  72.         painter = QtGui.QPainter
  73.         painter.begin(tempPixmap)
  74.        
  75.         painter.fillRect(pixmap.rect(), QtGui.QColor(127, 127, 127, 127))
  76.         painter.end()
  77.        
  78.         child.setPixMap(tempPixmap)
  79.        
  80.         if (drag.start(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction):
  81.             child.close()
  82.         else:
  83.             child.show()
  84.             child.setPixMap(pixmap)


Message édité par jijiz le 23-05-2007 à 15:21:34
Reply

Marsh Posté le 18-04-2007 à 09:29:38   

Reply

Marsh Posté le 18-04-2007 à 12:02:53    

Je vous en prie. J'ai trop de mal à apprendre pyQT4, car aucuns tutos valables ou avancés sur le net. Personne pour m'aider...

Reply

Marsh Posté le 18-04-2007 à 14:24:00    

up ca marche touj,ours pas. :cry:

Reply

Marsh Posté le 18-04-2007 à 14:33:23    

Fait du pygtk, c'est mieux documenté :o


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 18-04-2007 à 14:49:35    

0x90 a écrit :

Fait du pygtk, c'est mieux documenté :o


en fait j'ai pas vraiment le choix...

Reply

Marsh Posté le 18-04-2007 à 16:40:30    

bon ben up...

Reply

Marsh Posté le 23-05-2007 à 15:21:16    

Pour ceux à qui ca arriverait;
 
il faut bien vérifier à appeler le constructeur de la classe hérité du style :
 
class ObjectUI(QtGui.QLabel):
    def __init__(self, _QPSize, _QPPosition, parent=None):
        super (ObjectUI, self).__init__ (parent)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed