实现文件的拖放功能

文章目录

  • 实现文件的拖放功能
    • 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 sys

py_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.mfbz.cn/a/76491.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vuex学习总结

一、vuex工作原理 工作流程&#xff1a;需求&#xff1a;改变组件count的sun变量的值&#xff0c;先调用dispatch函数传入jia函数和要改变的值给actions&#xff08;这个actions里面必须有jia这个函数&#xff09;&#xff1b;actions收到后调用commit函数将jia方法和值传给mut…

【Visual Studio Code】--- Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径

Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径 一、概述二、修改 Code 插件数据和缓存的保存路径 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成…

28 | Boss直聘数据分析

针对boss直聘网的招聘信息,然后分析互联网发展排名前十的城市在互联网方面职位的薪水,学历要求,经验要求,等等信息。 准备从以下几个方面进行分析: (1)各个城市的平均工资 (2)各个学历的平均工资 (3)各个岗位的平均工资 (4)不同工作经验要求的工资 (5)各个经验…

冉冉升起的星火,再度升级迎来2.0时代!

文章目录 前言权威性评测结果 星火大模型多模态功能插件功能简历生成文档问答PPT生成 代码能力 福利 前言 前几天从技术群里看到大家都在谈论《人工智能大模型体验报告2.0》里边的内容&#xff0c;抱着好奇和学习的态度把报告看了一遍。看完之后瞬间被里边提到的科大讯飞的星火…

(leecode)错误的集合

最近听到的&#xff0c;还可以&#xff0c;试试吧~ 题目&#xff1a; 示例&#xff1a; 提示&#xff1a; 题解&#xff1a; 思路&#xff1a; 将数字大小的位置&#xff0c;然后遍历每个位置&#xff0c;大小为0的是缺失数字&#xff0c;大小为2的是重复数字 int* findErro…

Gitlab-第四天-CD到k8s集群的坑

一、.gitlab-ci.yml #CD到k8s集群的 stages: - deploy-test build-image-deploy-test: stage: deploy-test image: bitnami/kubectl:latest # 使用一个包含 kubectl 工具的镜像 tags: - k8s script: - ls -al - kubectl apply -f deployment.yaml # 根据实际情况替换…

Linux学习之firewallD

systemctl status firewalld.service查看一下firewalld服务的状态&#xff0c;发现状态是inactive (dead)。 systemctl start firewalld.service启动firewalld&#xff0c;systemctl status firewalld.service查看一下firewalld服务的状态&#xff0c;发现状态是active (runni…

【Apollo】阿波罗自动驾驶:塑造自动驾驶技术的未来

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

【Unity每日一记】方位辨别—向量的叉乘点乘结合

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Go 语言并发编程 及 进阶与依赖管理

1.0 从并发编程本质了解Go高性能的本质 1.1 Goroutine 协程可以理解为轻量级线程&#xff1b; Go更适合高并发场景原因之一&#xff1a;Go语言一次可以创建上万协成&#xff1b; “快速”&#xff1a;开多个协成 打印。 go func(): 在函数前加 go 代表 创建协程; time.Sleep():…

阿里云OSS对象存储的核心概念与购买应用

文章目录 1.OSS对象存储基本介绍1.1.OSS对象存储概念1.2.NAS与OSS存储的不同1.3.OSS的应用场景1.4.OSS术语对应表 2.购买OSS存储资源包3.KodCloud云盘接入OSS对象存储3.1.创建Bucket存储空间3.2.创建子用户用于管理Bucket3.3.获取用户的AccessKey3.3.为用户设置权限3.4.将Bucke…

PHP实践:分布式场景下的Session共享解决方案实现

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

PHP实现在线年龄计算器

1. 输入日期查询年龄 2. php laravel框架实现 代码 /*** 在线年龄计算器*/public function ageDateCal(){// 输入的生日时间$birthday $this->request(birthday);// 当前时间$currentDate date(Y-m-d);// 计算周岁$age date_diff(date_create($birthday), date_create($…

通过OpenTelemetry上报Python-flask应用数据(阿里云)

参考文档 https://help.aliyun.com/document_detail/611711.html?spma2c4g.90499.0.0.34a056ddTu2WWq 先按照 方法一&#xff1a;手动埋点上报Python应用数据 步骤测试上报是否正常。 flas 上报 在 手动埋点上报Python应用数据 的基础上&#xff0c;上报flask应用的数据&#…

LeetCode 160.相交链表

文章目录 &#x1f4a1;题目分析&#x1f4a1;解题思路&#x1f6a9;步骤一&#xff1a;找尾节点&#x1f6a9;步骤二&#xff1a;判断尾节点是否相等&#x1f6a9;步骤三&#xff1a;找交点&#x1f344;思路1&#x1f344;思路2 &#x1f514;接口源码 题目链接&#x1f449;…

leetcode 力扣刷题 数组交集(数组、set、map都可实现哈希表)

数组交集 349. 两个数组的交集排序&#xff0b;双指针数组实现哈希表unordered_setunordered_map 350. 两个数组的交集Ⅱ排序 双指针数组实现哈希表unordered_map 349. 两个数组的交集 题目链接&#xff1a;349. 两个数组的交集 题目内容如下&#xff0c;理解题意&#xff1a…

完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)

问题阐述 最近在Github上提交PR后&#xff0c;遇到了这么一个问题&#xff1a;golangci-lint运行失败&#xff0c;具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint&#xff1a; golangci-lint 是Go语言社区中常用的代码质量检查工具&#xff0c;它可以…

【C++学习手札】一文带你初识运算符重载

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a; C类 ♈️今日夜电波&#xff1a;クリームソーダとシャンデリア—Edo_Ame江户糖 1:20 ━━━━━━️&#x1f49f;──────── 3:40 …

Linux 僵死进程

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

第4章:决策树

停止 当前分支样本均为同一类时&#xff0c;变成该类的叶子节点。当前分支类型不同&#xff0c;但是已经没有可以用来分裂的属性时&#xff0c;变成类别样本更多的那个类别的叶子节点。当前分支为空时&#xff0c;变成父节点类别最多的类的叶子节点。 ID3 C4.5 Cart 过拟合 缺…
最新文章