title: Drag and Drop QLabels with PyQt5
body: <p>I'm trying to drag and drop a Qlabel on another Qlabel with PyQt5:</p>
  
  <pre><code>from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QMessageBox, QHBoxLayout, QVBoxLayout, QGridLayout,QFrame, QComboBox, QLabel, QLineEdit
  from PyQt5.QtGui import QIcon, QFont, QPixmap, QImage
  import sys
  
  
  class my_label(QLabel):
      def __init__(self,title,parent):
          super().__init__(title,parent)
          self.setAcceptDrops(True)
  
      def dragEnterEvent(self,event):
          if event.mimeData().hasFormat("text/plain"):
              event.accept()
          else:
              event.ignore()
      def dropEvent(self,event):
          self.setText(event.mimeData().text())
  
  
  class application(QWidget):
  
      def __init__(self):
          super().__init__()
          self.initUI()
  
      def initUI(self):
  
  
          label = my_label("drop there",self)
          label.resize(100,100)
          label.move(190,65)
  
          label_to_drag = QLabel("drag this",self)
          #label_to_drag.setDragEnabled(True)    #doesn't work with QLabel        
          self.show()
  
  
      def closeEvent(self,event):
          message = QMessageBox.question(self,"Message","Quit ?",QMessageBox.Yes | QMessageBox.No,QMessageBox.No)
  
          if message == QMessageBox.Yes:
              event.accept()
          else:
              event.ignore()
  
  app = QApplication(sys.argv)
  fenetre = application()
  sys.exit(app.exec_())
  </code></pre>
  
  <p>I wanted to make my first label "draggable",by calling the <code>setDragEnabled(True)</code> method (as i was doing for QLineEdit),and drop it on the second label to change his text. Dropping text from another app is working fine,but I can't find how to drag the QLabel inside my own app...
  What did I miss ? </p>
  
  <p>EDIT : modified the code to try to Drag&amp;Drop Images :</p>
  
  <pre><code>class DraggableLabel(QLabel):
  def __init__(self,parent,image):
      super(QLabel,self).__init__(parent)
      self.setPixmap(QPixmap(image))    
      self.show()
  def mousePressEvent(self, event):
      if event.button() == Qt.LeftButton:
          self.drag_start_position = event.pos()
  
  def mouseMoveEvent(self, event):
      if not (event.buttons() &amp; Qt.LeftButton):
          return
      if (event.pos() - self.drag_start_position).manhattanLength() &lt; QApplication.startDragDistance():
          return
      drag = QDrag(self)
      mimedata = QMimeData()
      mimedata.setText(self.text())
  
      drag.setMimeData(mimedata)
      pixmap = QPixmap(self.size())
      painter = QPainter(pixmap)
      painter.drawPixmap(self.rect(), self.grab())
      painter.end()
      drag.setPixmap(pixmap)
      drag.setHotSpot(event.pos())
      drag.exec_(Qt.CopyAction | Qt.MoveAction)
  
     class my_label(QLabel):
      def __init__(self,title,parent):
          super().__init__(title,parent)
          self.setAcceptDrops(True)
  
      def dragEnterEvent(self,event):
          if event.mimeData().hasFormat("text/plain"):
              print("event accepted")
              event.accept()
          else:
              print("event rejected")
              event.ignore()
      def dropEvent(self,event):
          if event.mimeData().hasImage():
              self.setPixmap(QPixmap.fromImage(QImage(event.mimeData().imageData())))
  
  class application(QWidget):
  
      def __init__(self):
          super().__init__()
          self.initUI()
  
      def initUI(self):
  
          label_to_drag = DraggableLabel(self,"index.jpg")
  
          label = my_label("drop there",self)
          label.resize(100,100)
          label.move(190,65)
  
  
  
          self.show()
  </code></pre>
  
  <p>When I drop the <code>DraggableLabel</code> (displaying the image) on <code>my_label</code>,the event is accepted, but <code>hasImage()</code> always returns false...Is the way I set the image up wrong ?</p>