前言
最初我的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))
三、最后
如果对你有帮助,感谢支持一下我的微信公众号。