实现文件的拖放功能

文章目录

  • 实现文件的拖放功能
    • 1 拖放文件至QT窗口
      • 1.1 实现方法
      • 1.2 效果演示
    • 2 拖放文件至python脚本
      • 2.1 实现方法
      • 2.2 效果演示

实现文件的拖放功能

试想一下,我们希望将一个python项目文件夹或者脚本在IDE中打开,无论是去IDE中选择文件夹路径,还是选择脚本的打开方式,都需要花点力气去点击选中。再或者,我们想要在命令行下运行python脚本,并且需要传入一个文件路径参数,手敲路径还是挺麻烦的。要是上述这些情况能用拖放文件的方式代替,毋庸置疑是方便且轻松的。

PS:下面介绍的方法只在Windows下测试成功。

1 拖放文件至QT窗口

为了给QT窗口添加拖放文件至窗体内并执行操作的功能,这里举一个例子。我们写了一个简单的三维模型文件可视化软件,即使软件中有“打开文件”的选项,但是在有些情况下还是很麻烦。我们希望能够将模型文件直接拖进软件的窗口内进行可视化绘制。

1.1 实现方法

参考这篇文章:Qt主窗口实现拖拽文件,显示到文本框

在窗口初始化函数中添加一行

self.setAcceptDrops(True)  # 设置接受拖拽

然后重写dragEnterEventdropEvent两个方法

    def dragEnterEvent(self, a0: QtGui.QDragEnterEvent) -> None:  # 拖动进入事件if a0.mimeData().hasUrls():a0.acceptProposedAction()else:a0.ignore()def dropEvent(self, a0: QtGui.QDropEvent) -> None:  # 放下事件mimeData = a0.mimeData()if mimeData.hasUrls():urlList = mimeData.urls()filename = urlList[0].toLocalFile() # 得到了文件的路径if filename: # 下面便是对文件的相关操作# 绘制图形_, suffix = os.path.splitext(filename)self.SceneManager.ClearAll()if suffix == '*.xyz':  # 点云绘制self.original_model = read_xyz(filename)self.SceneManager.drawPdSrc(self.original_model, (241 / 255, 135 / 255, 184 / 255), point_size = 3)else:self.original_model = ReadPolyData(filename).GetOutput()self.SceneManager.drawPdSrc(self.original_model)self.SceneManager.display()

1.2 效果演示

请添加图片描述

2 拖放文件至python脚本

已知在windows系统中,python脚本文件为.py文件,该文件是不支持拖放其他文件到其上的。我们希望实现将其他文件拖放到脚本文件上,作为其输入参数,并运行脚本。

2.1 实现方法

新建一个pyfile_droppable.reg文件,输入以下内容并保存:

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"[HKEY_CLASSES_ROOT\Python.File\Shell\open\command]
@=""<python interpreter path>" "%L" %*"

双击运行此文件,完成注册表相关信息的添加。相关原理参考:Make Python Scripts Droppable in Windows。

上面这个reg文件添加了两个项到注册表中,第3、4行的作用是使python脚本文件能接收拖放到它上面的文件(获取文件的路径),第6、7行的作用是指定运行python脚本的解释器路径。通过打开注册表查看发现,我们主要修改了下图中的两个地方。

image-20230814235158901

接着,我们新建一个测试脚本droppable_test.py,内容如下

import os
import syspy_dir = os.path.dirname(__file__)  # 当前脚本所在的目录
result_path = os.path.join(py_dir, 'result.txt')  # 生成的结果文件放在脚本目录下
args = sys.argv
# 合并内容并生成新文件
with open(args[1], 'rb') as f:data1 = f.read()
with open(args[2], 'rb') as f:data2 = f.read()
with open(result_path, 'wb') as f:f.write(data1 + data2)print("文件合并成功!结果文件保存至:" + result_path)
input("按任意键关闭窗口...")

2.2 效果演示

请添加图片描述

注意多个文件作为参数传入py脚本的顺序为选中多个文件的顺序,即从上到下,从左到右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/69307.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[GAN] 使用GAN网络进行图片生成的“调参人”入门指南——生成向日葵图片

[GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片 文章目录 [GAN] 使用GAN网络进行图片生成的“炼丹人”日志——生成向日葵图片1. 写在前面&#xff1a;1.1 应用场景&#xff1a;1.2 数据集情况&#xff1a;1.3 实验原理讲解和分析&#xff08;简化版&#x…

什么是前端框架?怎么学习? - 易智编译EaseEditing

前端框架是一种用于开发Web应用程序界面的工具集合&#xff0c;它提供了一系列预定义的代码和结构&#xff0c;以简化开发过程并提高效率。 前端框架通常包括HTML、CSS和JavaScript的库和工具&#xff0c;用于构建交互式、动态和响应式的用户界面。 学习前端框架可以让您更高效…

(7)(7.1) 使用航点和事件规划任务

文章目录 前言 7.1.1 设置Home位置 7.1.2 视频&#xff1a;制作并保存多路点任务 7.1.3 视频&#xff1a;加载已保存的多航点任务 7.1.4 使用说明 7.1.5 提示 7.1.6 自动网格 7.1.7 任务指令 7.1.8 任务结束 7.1.9 任务重置 7.1.10 MIS_OPTIONS 7.1.11 任务再出发 …

解决右键打印html只能识别1页的问题

hello,大家好久不见,昨天在开发中遇到了一个问题,就是在自己开发的网页中右键-->打印&#xff0c;由于页面内容过多&#xff0c;打印出来的内容只被识别到一页。 针对这一问题&#xff0c;查阅了好多资料最终解决啦。 1.问题重现 大家可以看到这个是我们开发的页面,公司需要…

【工程优化问题】基于鲸鱼、萤火虫、灰狼优化算法的张力、压缩弹簧设计问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【密码学】维京密码

维京密码 瑞典罗特布鲁纳巨石上的图案看起来毫无意义&#xff0c;但是它确实是一种维京密码。如果我们注意到每组图案中长笔画和短笔画的数量&#xff0c;将得到一组数字2、4、2、3、3、5、2、3、3、6、3、5。组合配对得到24、23、35、23、36、35。现在考虑如图1.4所示的内容&a…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型&#xff08;勘定Category&#xff09;栏目。 ・账号分配类型&#xff08;勘定Category&#xff09;有&#xff1a; 1&#xff0c;K 原价Center&#xff08;成本中心。用于消耗物料采购 的过账&#xff09; 2&#xff0c;E 得意先…

Linux 僵死进程

fork复制进程之后&#xff0c;会产生一个进程叫做子进程&#xff0c;被复制的进程就是父进程。不管父进程先结束&#xff0c;还是子进程先结束&#xff0c;对另外一个进程完全没有影响&#xff0c;父进程和子进程是两个不同的进程。 一、孤儿进程 现在有以下代码&#xff1a;…

大数据Flink(六十):Flink 数据流和分层 API介绍

文章目录 Flink 数据流和分层 API介绍 一、​​​​​​​​​​​​​​Flink 数据流

【Vue-Router】路由元信息

路由元信息&#xff08;Route Meta Information&#xff09;是在路由配置中为每个路由定义的一组自定义数据。这些数据可以包含任何你希望在路由中传递和使用的信息&#xff0c;比如权限、页面标题、布局设置等。Vue Router 允许你在路由配置中定义元信息&#xff0c;然后在组件…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增强功能 添加了对在Microsoft Windows上部署Microsoft Azure的支持。 添加了对显示嵌入字体的支持。 .NET标准版的经典C1PDF(Beta版) GrapeCity的经典C1Pdf库现在提供了基于Microsoft.NET标准的版本。在任何.NET应用程序(包括…

【论文阅读】DEPCOMM:用于攻击调查的系统审核日志的图摘要(SP-2022)

Xu Z, Fang P, Liu C, et al. Depcomm: Graph summarization on system audit logs for attack investigation[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 540-557. 1 摘要 ​ 提出了 DEPCOMM&#xff0c;这是一种图摘要方法&#xff0c;通过将大图划…