python拖拽读取路径处理文件_pyqt实现文件拖放获取路径

前言

文件拖放自动填充路径操作本应该是个很简单的操作,结果搜到的教程都在讲控件的拖拽,几经折磨后终于算是实现了这个功能吧。

操作

首先,要知道pyqt的控件有个setAcceptDrops(bool)方法可以设置控件是否接受拖放这个动作,如果是用qt设计师设计的界面可以看到该属性是默认打开的,既然默认打开,那么理论就应该可以实现文件拖放功能。

但实际操作时我却发现在IDE里可以拖放,但是到了实际的桌面却无法拖放,这一点我真是无法理解啊。。

因此我只好去看了一些拖拽的教程,发现在重写一个新的QLineEdit类的情况下是可以使用的,重写的类如下:class MyQLine(QLineEdit):

"""实现文件拖放功能"""

def __init__(self):

super().__init__()

self.setAcceptDrops(True) # 设置接受拖放动作

def dragEnterEvent(self, e):

if e.mimeData().text().endswith('.srt'): # 如果是.srt结尾的路径接受

e.accept()

else:

e.ignore()

def dropEvent(self, e): # 放下文件后的动作

path = e.mimeData().text().replace('file:///', '') # 删除多余开头

self.setText(path)

最关键的是e.mimeData().text()获取路径,这里的mimeData()可以参考官方说明

还有一个问题就是我是用qt设计师设计界面然后动态导入的,我自己新建了一个单行文本控件后,哪怕控件名字和之前的名字一样,最后生成的界面里还是会出现两个文本框,但我又不想在qt设计师里删除原来的文本框。所以我只好来个移花接木,把原来的文本框删掉并替换成我自己的。self.ui.file_path.deleteLater() # 删除原有的路径框

self.ui.file_path = MyQLine() # 新建自己的替换原有的

self.ui.file_path.setPlaceholderText('浏览或拖拽SRT字幕文件到这里')

self.ui.horizontalLayout_2.addWidget(self.ui.file_path)

self.ui.horizontalLayout_2.addWidget(self.ui.file)

针对上面的问题我后来找到了解决方案。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值