PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径

Posted 王张飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径相关的知识,希望对你有一定的参考价值。

前言

最初我的QLineEdit连最基本的拖入都不能实现,即使Enable了acceptDrops。

大量的网上冲浪之后,得出的最终解决方案 参考 自stackoverflow上的一个问答,链接贴出:

https://stackoverflow.com/questions/11872141/drag-a-file-into-qtgui-qlineedit-to-set-url-text

一、直接上代码

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

# 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))

以上是关于PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径

PyQt5 QLineEdit控件 实现拖入文件时自动显示文件路径

《PyQT5软件开发 - 控件篇》第3章 单行文本框QLineEdit

将文件拖入 QtGui.QLineEdit() 以设置 url 文本

PyQt5 - 从 QLineEdit 传递用户输入以更新另一个文件中的字典

如何使 Pyqt5 QLineEdit 只接受数字