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
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
from PySide6.QtCore import QMimeData, Qt, Slot, Signal
from PySide6.QtGui import QPalette, QPixmap
from PySide6.QtWidgets import QFrame, QLabel
class DropArea(QLabel):
changed = Signal(QMimeData)
def __init__(self, parent=None):
super().__init__(parent)
self.setMinimumSize(200, 200)
self.setFrameStyle(QFrame.Sunken | QFrame.StyledPanel)
self.setAlignment(Qt.AlignCenter)
self.setAcceptDrops(True)
self.setAutoFillBackground(True)
self.clear()
def dragEnterEvent(self, event):
self.setText("<drop content>")
self.setBackgroundRole(QPalette.Highlight)
event.acceptProposedAction()
self.changed.emit(event.mimeData())
def dragMoveEvent(self, event):
event.acceptProposedAction()
def dropEvent(self, event):
mime_data = event.mimeData()
if mime_data.hasImage():
self.setPixmap(QPixmap(mime_data.imageData()))
elif mime_data.hasFormat("text/markdown"):
self.setText(mime_data.data("text/markdown"))
self.setTextFormat(Qt.MarkdownText)
elif mime_data.hasHtml():
self.setText(mime_data.html())
self.setTextFormat(Qt.RichText)
elif mime_data.hasText():
self.setText(mime_data.text())
self.setTextFormat(Qt.PlainText)
elif mime_data.hasUrls():
url_list = mime_data.urls()
text = ""
for i in range(0, min(len(url_list), 32)):
text += url_list[i].path() + "\n"
self.setText(text)
else:
self.setText("Cannot display data")
self.setBackgroundRole(QPalette.Dark)
event.acceptProposedAction()
def dragLeaveEvent(self, event):
self.clear()
event.accept()
@Slot()
def clear(self):
self.setText("<drop content>")
self.setBackgroundRole(QPalette.Dark)
self.changed.emit(None)
|