[Python] 354 PyQt6でドラッグ&ドロップ

[M1 Mac, Monterey 12.6.3, Python 3.10.4]

PyQt6ではQLineEdit(FLTKにおけるFl_Input)にドラッグ&ドロップできるようにするには、QLineEditを継承したクラスを別途作成する必要があります。

機能が簡素なFLTKでもドラッグ&ドロップは標準装備されているのでこれは意外です。

from PyQt6.QtWidgets import QLineEdit

class MyLineEdit(QLineEdit):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setDragEnabled(True)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasUrls():
            for url in event.mimeData().urls():
                file_path = url.toLocalFile()
                self.setText(file_path)
            event.accept()
        else:
            event.ignore()