| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- '''
- Hérite de QLabel, accepte les drop de fichiers et lit leur
- @author: olivier.massot, nov. 2017
- '''
- import re
- from PyQt5.Qt import QLabel, Qt, pyqtSignal, QTextCodec
- from path import Path
- from core import constants
- class DropLabel(QLabel):
- dropped = pyqtSignal()
- def __init__(self, parent):
- super(QLabel, self).__init__(parent)
- self.setAcceptDrops(True)
- def dragEnterEvent(self, event):
- if event.mimeData().hasUrls:
- event.accept()
- else:
- event.ignore()
- def dragMoveEvent(self, event):
- if event.mimeData().hasUrls:
- event.setDropAction(Qt.CopyAction)
- event.accept()
- else:
- event.ignore()
- def dropEvent(self, event):
- data = event.mimeData().data("FileGroupDescriptorW")
- data = QTextCodec.codecForName("UTF-16").toUnicode(data)
- data = re.findall(r"[\w\-. ]+", data)
- if event.mimeData().hasFormat("FileGroupDescriptor"):
- event.setDropAction(Qt.CopyAction)
- event.accept()
- # Get the file's name from mime data
- data = event.mimeData().data("FileGroupDescriptorW")
- data = QTextCodec.codecForName("UTF-16").toUnicode(data)
- names = re.findall(r"[\w\-. ]+", data)
- if len(names) > 1:
- raise IOError("Vous ne pouvez pas traiter plus d'un fichier à la fois!")
- filename = Path(names[0])
- if not filename.ext == ".xml":
- raise IOError("Le fichier doit être un fichier '.xml'.")
- # Write the file in a temporary directory
- with open(constants.TMPDIR / filename, 'wb') as f:
- f.write(event.mimeData().data("FileContents"))
- self.url = (constants.TMPDIR / filename)
- self.dropped.emit()
- elif event.mimeData().hasUrls:
- event.setDropAction(Qt.CopyAction)
- event.accept()
- links = [url.toLocalFile() for url in event.mimeData().urls()]
- self.url = links[0]
- self.dropped.emit()
- else:
- event.ignore()
|