-
Notifications
You must be signed in to change notification settings - Fork 0
/
prjchooser.py
54 lines (45 loc) · 1.55 KB
/
prjchooser.py
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import sys
from PySide2 import QtWidgets, QtGui, QtCore
class ProjectListWidget(QtWidgets.QListWidget):
def __init__(self, parent=None):
QtWidgets.QListWidget.__init__(self, parent)
self.setAcceptDrops(True)
self.startPos = QPoint(0, 0)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.startPos = QtCore.QPoint(event.pos())
QtWidgets.QListWidget.mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.button() & QtCore.Qt.LeftButton:
distance = (event.pos() - self.startPos).manhattanLength()
if distance >= QtWidgets.QApplication.startDragDistance():
self.performDrag()
QtWidgets.QListWidget.mouseMoveEvent(event)
def performDrag(self):
item = self.currentItem()
if item:
mimeData = QtCore.QMimeData()
mimeData.setText(item.text())
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
drag.setPixmap(QPixmap('person.png'))
if drag.exec(QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction:
pass
def dragEnterEvent(self, event):
source = event.source()
if source and (not isinstance(source, self)):
event.setDropAction(QtCore.Qt.MoveAction)
event.accept()
else:
print('dragEnter condition failed')
def dragMoveEvent(self, event):
source = event.source()
if source and (not isinstance(source, self)):
event.setDropAction(QtCore.Qt.MoveAction)
event.accept()
def dropEvent(self, event):
source = event.source()
if source and (not isinstance(source, self)):
self.addItem(event.mimeData().text())
event.setDropAction(QtCore.Qt.MoveAction)
event.accept()