Skip to content

Instantly share code, notes, and snippets.

@remram44
Created January 14, 2013 18:32
Show Gist options
  • Select an option

  • Save remram44/4532188 to your computer and use it in GitHub Desktop.

Select an option

Save remram44/4532188 to your computer and use it in GitHub Desktop.
import sys
from PyQt4 import QtCore, QtGui
class MyDraggableWidget(QtGui.QLabel):
def __init__(self):
QtGui.QLabel.__init__(self)
self.setText("DRAG ME")
self._startpos = None
def mousePressEvent(self, event):
self._startpos = QtCore.QPoint(event.pos())
QtGui.QLabel.mousePressEvent(self, event)
def mouseMoveEvent(self, event):
p = event.pos() - self._startpos
if p.manhattanLength() >= QtGui.QApplication.startDragDistance():
drag = QtGui.QDrag(self)
mimeData = QtCore.QMimeData()
mimeData.widget = self
drag.setMimeData(mimeData)
drag.exec_(QtCore.Qt.MoveAction)
class MyTargetWidget(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setMinimumSize(80, 80)
self.setAcceptDrops(True)
def paintEvent(self, event):
QtGui.QWidget.paintEvent(self, event)
painter = QtGui.QPainter(self)
painter.setPen(QtGui.QColor(255, 0, 0))
painter.drawLine(0, 0, self.width(), self.height())
painter.drawLine(15, self.height(), self.width() - 15, 0)
def dragEnterEvent(self, event):
event.accept()
def dropEvent(self, event):
mimeData = event.mimeData()
event.accept()
mimeData.widget.deleteLater() # OMG
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
draggable = MyDraggableWidget()
layout.addWidget(draggable)
target = MyTargetWidget()
layout.addWidget(target)
window.setLayout(layout)
window.setVisible(True)
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment