-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdrag_widget.py
More file actions
39 lines (31 loc) · 1.34 KB
/
drag_widget.py
File metadata and controls
39 lines (31 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from PySide6 import QtCore, QtGui, QtWidgets
from PySide6.QtCore import Qt
class DragWidget(QtWidgets.QWidget):
on_drop = QtCore.Signal(dict)
on_drag_start = QtCore.Signal(dict)
on_drag_end = QtCore.Signal(dict)
def __init__(self, parent: QtWidgets.QWidget):
super().__init__(parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, a0: QtGui.QDragEnterEvent) -> None:
a0.accept()
def drag_end_event(self):
self.on_drag_end.emit({'self': self})
def dropEvent(self, a0: QtGui.QDropEvent) -> None:
self.on_drop.emit({'self': self, 'widget': a0.source()})
def mouseMoveEvent(self, a0: QtGui.QMouseEvent) -> None:
if a0.buttons() == Qt.MouseButton.LeftButton:
drag = QtGui.QDrag(self)
mime = QtCore.QMimeData()
drag.setMimeData(mime)
drag.destroyed.connect(self.drag_end_event)
pixmap = QtGui.QPixmap(self.size())
self.render(pixmap)
drag.setPixmap(pixmap)
self.on_drag_start.emit({'self': self})
drag.exec(Qt.DropAction.MoveAction)
def paintEvent(self, a0: QtGui.QPaintEvent) -> None:
o = QtWidgets.QStyleOption()
o.initFrom(self)
p = QtGui.QPainter(self)
self.style().drawPrimitive(QtWidgets.QStyle.PrimitiveElement.PE_Widget, o, p, self)