generated from LouisMazin/PythonApplicationTemplate
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from PyQt6.QtWidgets import QFrame, QLabel
|
|
from PyQt6.QtCore import Qt
|
|
|
|
class DragDropFrame(QFrame):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.parent_window = parent
|
|
self.setAcceptDrops(True)
|
|
self.is_dragging = False
|
|
self.drag_indicator = self.getDragIndicator()
|
|
self.drag_text = self.getDragText()
|
|
|
|
def dragEnterEvent(self, event):
|
|
if event.mimeData().hasUrls():
|
|
self.is_dragging = True
|
|
self.drag_text.hide()
|
|
self.drag_indicator.show()
|
|
event.acceptProposedAction()
|
|
else:
|
|
event.ignore()
|
|
|
|
def dragLeaveEvent(self, event):
|
|
self.is_dragging = False
|
|
self.drag_indicator.hide()
|
|
self.drag_text.show()
|
|
super().dragLeaveEvent(event)
|
|
|
|
def dropEvent(self, event):
|
|
self.is_dragging = False
|
|
self.drag_indicator.hide()
|
|
self.drag_text.show()
|
|
urls = event.mimeData().urls()
|
|
if urls and self.parent_window:
|
|
file_path = urls[0].toLocalFile()
|
|
self.parent_window.set_dicom_from_files(file_path)
|
|
|
|
def getDragIndicator(self) -> QLabel:
|
|
drag_indicator = QLabel(self)
|
|
drag_indicator.setText("+")
|
|
drag_indicator.setObjectName("drag_indicator")
|
|
drag_indicator.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
drag_indicator.show()
|
|
return drag_indicator
|
|
|
|
def getDragText(self) -> QLabel:
|
|
drag_text = QLabel(self)
|
|
drag_text.setObjectName("drag_area")
|
|
drag_text.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
drag_text.show()
|
|
return drag_text
|
|
|
|
def setDragText(self, text: str):
|
|
self.drag_text.setText(text)
|
|
|
|
def resizeEvent(self, event):
|
|
super().resizeEvent(event)
|
|
# Ensure components fill the entire frame
|
|
self.drag_indicator.resize(self.size())
|
|
self.drag_text.resize(self.size()) |