from PySide2.QtWidgets import QApplication, QMainWindow, QTextEdit
from PySide2.QtCore import Qt, QMimeData
from PySide2.QtGui import QDragEnterEvent, QDropEvent
class MyTextEdit(QTextEdit):
def __init__(self, parent=None):
super().__init__(parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, event: QDragEnterEvent):
if event.mimeData().hasText():
event.acceptProposedAction()
def dropEvent(self, event: QDropEvent):
if event.mimeData().hasText():
text = event.mimeData().text()
self.insertPlainText(text)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.text_edit = MyTextEdit(self)
self.setCentralWidget(self.text_edit)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在dragEnterEvent
中判断如果当前mime
类型为文本或者url
(本地文件是以url
类型描述的),则调用acceptProposedAction
来设置对应的事件发生flag——只有设置了这个flag,后面的drop事件才会发生。如果要捕获所有类型的拖放事件则可以直接调用。
获取拖入文件的路径、文件名: