PyQt5 QLineEdit控件之实现拖入文件时自动显示文件路径的简单方案

801 阅读1分钟

前言

最初我的QLineEdit连最基本的拖入都不能实现,即使Enable了acceptDrops。 在这里插入图片描述 大量的网上冲浪之后,得出的最终解决方案 参考 自stackoverflow上的一个问答,链接贴出:

stackoverflow.com/questions/1…

一、直接上代码

将下述类加入到你的代码中:

# python
class QEventHandler(QtCore.QObject):
    def eventFilter(self, obj, event):
        """
        处理窗体内出现的事件,如果有需要则自行添加if判断语句;
        目前已经实现将拖到控件上文件的路径设置为控件的显示文本;
        """
        if event.type() == QtCore.QEvent.DragEnter:
            event.accept()
        if event.type() == QtCore.QEvent.Drop:
            md = event.mimeData()
            if md.hasUrls():
            	# 此处md.urls()的返回值为拖入文件的file路径列表,即支持多文件同时拖入;
            	# 此处默认读取第一个文件的路径进行处理,可按照个人需求进行相应的修改
                url = md.urls()[0]
                obj.setText(url.toLocalFile())
                return True
        return super().eventFilter(obj, event)

二、使用方法

  • 1、目标控件已经将acceptDrops设置为True,目的可以接受拖来的文件。

  • 2、目标控件安装过滤器,如:

# 在主窗体的类实现中, 使用
self.test_lineedit.installEventFilter(QEventHandler(self))
# 或者是在main函数的主窗体实例化之后,假设主窗体的实例为mainWindow
mainwindow.test_lineedit.instalEventFilter(QEventHandler(mainwindow.test_lineedit))

三、最后

如果对你有帮助,感谢支持一下我的微信公众号。

在这里插入图片描述