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 文本