代码功能介绍

这个代码的功能就是一个,给某个文件夹里面添加某个文件(含父级文件夹下的每一个子文件夹)
举个例子,父级文件夹是:“D:\Desktop\1,要添加的文件路径是:D:\1.txt”

则最后会把文件1.txt复制到文件夹D:\Desktop\1里面去。

文末提供源码和打包成品

代码界面截图

在这里插入图片描述
下面是现成的源码

import sys
import os
import shutil
import webbrowser
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QWidget, QTextEdit, QMessageBox, QFileDialog)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QPalette, QColorclass FileCopyTool(QMainWindow):def __init__(self):super().__init__()# 定义颜色常量self.BUTTON_BLUE = QColor(33, 150, 243)     # 按钮蓝色(#2196F3)self.BUTTON_GREEN = QColor(76, 175, 80)     # 按钮绿色(#4CAF50)self.BUTTON_RED = QColor(244, 67, 54)       # 按钮红色(#f44336)self.LINE_EDIT_BG = QColor(245, 245, 245)   # 文本框背景色(浅灰色)self.folder_list = []  # 存储多个文件夹路径self.initUI()def initUI(self):# 设置窗口标题和大小self.setWindowTitle('文件批量复制工具@阿幸')self.setGeometry(100, 100, 900, 600)self.setMinimumSize(800, 500)# 创建中心部件central_widget = QWidget()self.setCentralWidget(central_widget)# 主布局main_layout = QVBoxLayout(central_widget)main_layout.setContentsMargins(15, 15, 15, 15)main_layout.setSpacing(12)# 批量文件夹区域batch_folder_layout = QHBoxLayout()batch_folder_layout.setSpacing(10)self.batch_folder_label = QLabel('文件夹路径:')self.batch_folder_label.setFont(QFont("Microsoft YaHei", 10))self.batch_folder_label.setFixedWidth(100)self.batch_folder_label.setAlignment(Qt.AlignVCenter | Qt.AlignRight)self.batch_folder_edit = QLineEdit()self.setup_line_edit_bg(self.batch_folder_edit)self.batch_folder_edit.setFont(QFont("Microsoft YaHei", 10))# 设置默认文件夹路径self.default_folder = r"D:\Desktop\文件存储"# 检查默认路径是否存在if os.path.exists(self.default_folder):self.folder_list = [self.default_folder]self.batch_folder_edit.setText(self.default_folder)else:self.batch_folder_edit.setPlaceholderText("已选择 0 个文件夹")self.batch_folder_edit.setReadOnly(True)self.batch_folder_btn = self.create_browse_button("浏览", self.select_batch_folders, self.BUTTON_GREEN)self.clear_batch_btn = self.create_browse_button("清空", self.clear_batch_folders, self.BUTTON_RED)batch_folder_layout.addWidget(self.batch_folder_label)batch_folder_layout.addWidget(self.batch_folder_edit, 1)batch_folder_layout.addWidget(self.batch_folder_btn)batch_folder_layout.addWidget(self.clear_batch_btn)# 源文件路径区域source_file_layout = QHBoxLayout()source_file_layout.setSpacing(10)self.source_file_label = QLabel('文件路径:')self.source_file_label.setFont(QFont("Microsoft YaHei", 10))self.source_file_label.setFixedWidth(100)self.source_file_label.setAlignment(Qt.AlignVCenter | Qt.AlignRight)self.source_file_edit = QLineEdit()self.setup_line_edit_bg(self.source_file_edit)self.source_file_edit.setFont(QFont("Microsoft YaHei", 10))self.source_file_edit.setText(r"D:\1.txt")self.source_file_btn = self.create_browse_button("浏览", self.select_source_file, self.BUTTON_BLUE)source_file_layout.addWidget(self.source_file_label)source_file_layout.addWidget(self.source_file_edit, 1)source_file_layout.addWidget(self.source_file_btn)# 功能按钮区域button_layout = QHBoxLayout()button_layout.setSpacing(20)button_layout.setContentsMargins(0, 5, 0, 5)self.copy_button = QPushButton('开始批量复制')self.copy_button.setFont(QFont("Microsoft YaHei", 12, QFont.Bold))self.copy_button.setFixedSize(150, 40)self.copy_button.clicked.connect(self.start_copy)self.setup_button_style(self.copy_button, self.BUTTON_BLUE)self.advanced_button = QPushButton('高级功能')self.advanced_button.setFont(QFont("Microsoft YaHei", 12, QFont.Bold))self.advanced_button.setFixedSize(120, 40)self.advanced_button.clicked.connect(self.open_advanced)self.setup_button_style(self.advanced_button, self.BUTTON_GREEN)button_layout.addStretch(1)button_layout.addWidget(self.copy_button, alignment=Qt.AlignCenter)button_layout.addWidget(self.advanced_button, alignment=Qt.AlignCenter)button_layout.addStretch(1)# 日志显示区域log_container = QVBoxLayout()log_container.setSpacing(5)self.log_label = QLabel('操作日志:')self.log_label.setFont(QFont("Microsoft YaHei", 10, QFont.Bold))self.log_text = QTextEdit()self.log_text.setReadOnly(True)self.log_text.setFont(QFont("Microsoft YaHei", 10))self.setup_line_edit_bg(self.log_text)log_container.addWidget(self.log_label)log_container.addWidget(self.log_text)# 添加所有组件到主布局main_layout.addLayout(batch_folder_layout)main_layout.addLayout(source_file_layout)main_layout.addLayout(button_layout)main_layout.addLayout(log_container, 1)def create_browse_button(self, text, callback, color):"""创建统一风格的按钮"""button = QPushButton(text)button.setFont(QFont("Microsoft YaHei", 10, QFont.Bold))button.setFixedWidth(80)button.clicked.connect(callback)self.setup_button_style(button, color)return buttondef setup_line_edit_bg(self, widget):"""设置文本框背景颜色"""palette = widget.palette()palette.setColor(QPalette.Base, self.LINE_EDIT_BG)palette.setColor(QPalette.Text, QColor(0, 0, 0))widget.setPalette(palette)widget.setAutoFillBackground(True)def setup_button_style(self, button, base_color):"""设置按钮样式"""button.setStyleSheet(f"""QPushButton {{background-color: rgb({base_color.red()}, {base_color.green()}, {base_color.blue()});color: white;border: none;padding: 5px;border-radius: 4px;}}QPushButton:hover {{background-color: rgb({int(base_color.red()*0.8)}, {int(base_color.green()*0.8)}, {int(base_color.blue()*0.8)});}}QPushButton:pressed {{background-color: rgb({int(base_color.red()*0.7)}, {int(base_color.green()*0.7)}, {int(base_color.blue()*0.7)});}}""")button.setFocusPolicy(Qt.NoFocus)# 文件夹选择功能def select_batch_folders(self):"""选择多个文件夹并显示路径"""folder = QFileDialog.getExistingDirectory(self, "选择文件夹", self.default_folder)if folder:if folder not in self.folder_list:self.folder_list.append(folder)# 显示所有已选择的文件夹路径,用分号分隔self.batch_folder_edit.setText("; ".join(self.folder_list))QMessageBox.information(self, '成功', f'已添加 {len(self.folder_list)} 个文件夹')def clear_batch_folders(self):"""清空已选择的批量文件夹"""self.folder_list.clear()self.batch_folder_edit.clear()self.batch_folder_edit.setPlaceholderText("已选择 0 个文件夹")QMessageBox.information(self, '提示', '已清空所有选择的文件夹')# 文件选择功能def select_source_file(self):file, _ = QFileDialog.getOpenFileName(self, "选择源文件", os.path.dirname(self.source_file_edit.text()))if file:self.source_file_edit.setText(file)def start_copy(self):"""批量复制逻辑"""source_file = self.source_file_edit.text().strip()# 验证源文件if not source_file or not os.path.isfile(source_file):QMessageBox.warning(self, '文件错误', '请输入有效的源文件路径')return# 验证批量文件夹if not self.folder_list:QMessageBox.warning(self, '路径错误', '请选择至少一个文件夹')returnself.log_text.clear()try:# 遍历所有目标文件夹for folder in self.folder_list:# 复制文件到每个目标文件夹的子文件夹中for root, dirs, files in os.walk(folder):for dir in dirs:dest_path = os.path.join(root, dir, os.path.basename(source_file))try:shutil.copy2(source_file, dest_path)self.log_text.append(f"已复制到:{dest_path}")except Exception as e:self.log_text.append(f"复制失败到 {dest_path}: {e}")QMessageBox.information(self, '完成', '批量复制操作已完成')except Exception as e:QMessageBox.critical(self, '错误', f'操作过程中发生错误: {str(e)}')def open_advanced(self):webbrowser.open("你自己的")if __name__ == '__main__':app = QApplication(sys.argv)app.setStyle("Fusion")window = FileCopyTool()window.show()sys.exit(app.exec_())

源码打包

1、你需要安装Python(不会安装的自行解决)

2、下载我提供的源码文件

3、将源码文件放在Python路径下

4、打开cmd界面,输入:“D:\Program Files (x86)\biancheng\python3113\python.exe” -m PyInstaller --onefile --windowed “D:\Program Files (x86)\biancheng\python3113\批量给文件夹添加文件v2.py”

其中D:\Program Files (x86)\biancheng\python3113要替换为你自己的Python路径

成品下载

如果你不会打包,就直接用我写的吧。
夸克

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

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

相关文章

Qt实现2048小游戏:看看AI如何评估棋盘策略实现“人机合一

2048 是一款经典的数字益智游戏,其简单的规则背后蕴含着丰富的策略性。该项目不仅完整实现了 2048 的核心玩法,还包含了一个基于启发式评估和蒙特卡洛方法的智能 AI 玩家。 我们将从项目整体架构入手,逐一解析游戏核心逻辑、UI 渲染、事件处理、AI 策略等关键模块,并通过展…

封装红黑树实现mysetmymap

1. 源码分析 set实例化rb_tree时第二个模板参数给的是key&#xff0c;map实例化rb_tree时第⼆个模板参数给的是 pair<const key,T>&#xff0c;这样一颗红黑树既可以实现key搜索场景的set&#xff0c;也可以实现key/value搜索场 景的map源码里面模板参数是用T代表value&…

以OWTB为核心以客户为基础的三方仓运配一体化平台分析V0.2

一、系统概述以OWTB&#xff08;Order-Warehouse-Transportation-Billing&#xff0c;订单-仓储-运输-结算&#xff09;为核心的三方仓运配一体化平台&#xff0c;是专为第三方物流企业打造的深度定制化解决方案。该平台以第三方仓运配为主线&#xff0c;以多客户/多SKU/个性化…

技术框架之脚手架实现

一、 序言在日常的企业级Java开发中&#xff0c;我们经常会发现自己在重复地做着一些项目初始化工作&#xff1a;创建相似的项目结构、引入一堆固定的依赖包、编写通用的配置文件、拷贝那些几乎每个项目都有的基础工具类和日志配置。这些工作不仅枯燥乏味&#xff0c;而且容易出…

小迪安全v2023学习笔记(七十七讲)—— 业务设计篇隐私合规检测重定向漏洞资源拒绝服务

文章目录前记WEB攻防——第七十七天业务设计篇&隐私合规检测&URL重定向&资源拒绝服务&配合项目隐私合规 - 判断规则&检测项目介绍案例演示URL重定向 - 检测判断&钓鱼配合介绍黑盒测试看业务功能看参数名goole语法搜索白盒测试跳转URL绕过思路钓鱼配合资…

用AI做旅游攻略,真能比人肉整理靠谱?

大家好&#xff0c;我是极客团长&#xff01; 作为一个沉迷研究 “AI 工具怎么渗透日常生活” 的科技博主&#xff0c;我开了个 AI 解决生活小事系列。 前两期聊了用 AI 写新闻博客、扒商业报告&#xff0c;后台一堆人催更&#xff1a;能不能搞点接地气的&#xff1f;比如&am…

Axure RP 9 Mac 交互原型设计

原文地址&#xff1a;Axure RP 9 Mac 交互原型设计 安装教程 Axure RP 9是一款功能强大的原型设计和协作工具。 它不仅能够帮助用户快速创建出高质量的原型设计&#xff0c;还能促进团队成员之间的有效协作&#xff0c;从而极大地提高数字产品开发的效率和质量。 拥有直观易…

多线程——线程状态

目录 1.线程的状态 1.1 NEW 1.2 RUNNABLE 1.3 BLOCKED 1.4 WAITING 1.5 TIMED_WAITING 1.6 TERMINATED 2.线程状态的相互转换 在上期的学习中&#xff0c;已经理解线程的启动&#xff08;start()&#xff09;、休眠&#xff08;sleep()&#xff09;、中断&#xff08;i…

IMX6ULL的设备树文件简析

先分析一个完整的设备树&#xff0c;是怎么表达各种外设信息的。以imux6ull开发板为例进行说明。这个文件里就一个设备信息才这么点内容&#xff0c;是不是出问题了&#xff1f;当然不是&#xff0c;我们知道dts文件是可包含的&#xff0c;所以&#xff0c;最终形成的一个完整文…

【ARM】PACK包管理

1、 文档目标对 pack 包的管理有更多的了解。2、 问题场景客户在安装了过多的 pack 包导致软件打开比较慢&#xff0c;各种 pack 包颜色的区别&#xff0c;及图标不同。3、软硬件环境1&#xff09;、软件版本&#xff1a;Keil MDK 5.392&#xff09;、电脑环境&#xff1a;Wind…

【Kubernetes】知识点4

36. 说明K8s中Pod级别的Graceful Shutdown。答&#xff1a;Graceful Shutdown&#xff08;优雅关闭&#xff09;是指当 Pod 需要终止时&#xff0c;系统给予运行中的容器一定的时间来等待业务的应用的正常关闭&#xff08;如保存数据、关闭连接、释放资源等&#xff09;&#x…

Paraverse平行云实时云渲染助力第82届威尼斯电影节XR沉浸式体验

今年&#xff0c;Paraverse平行云实时云渲染平台LarkXR&#xff0c;为享有盛誉的第82届威尼斯国际电影节&#xff08;8月27日至9月6日&#xff09;带来沉浸式体验。 LarkXR助力我们的生态伙伴FRENCH TOUCH FACTORY&#xff0c;实现ITHACA容积视频的XR交互演示&#xff0c;从意大…

大数据开发计划表(实际版)

太好了&#xff01;我将为你生成一份可打印的PDF版学习计划表&#xff0c;并附上项目模板与架构图示例&#xff0c;帮助你更直观地执行计划。 由于当前环境无法直接生成和发送文件&#xff0c;我将以文本格式为你完整呈现&#xff0c;你可以轻松复制到Word或Markdown中&#xf…

GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【二】

沿袭我们的月度发布传统&#xff0c;极狐GitLab 发布了 18.3 版本&#xff0c;该版本带来了通过直接转移进行迁移、CI/CD 作业令牌的细粒度权限控制、自定义管理员角色、Kubernetes 1.33 支持、通过 API 让流水线执行策略访问 CI/CD 配置等几十个重点功能的改进。下面是对部分重…

Docker学习笔记(二):镜像与容器管理

Docker 镜像 最小的镜像 hello-world 是 Docker 官方提供的一个镜像&#xff0c;通常用来验证 Docker 是否安装成功。 先通过 docker pull 从 Docker Hub 下载它。 [rootdocker ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-wor…

STM32F103C8T6开发板入门学习——寄存器和库函数介绍

学习目标&#xff1a;STM32F103C8T6开发板入门学习——寄存器和库函数介绍学习内容&#xff1a; 1. 寄存器介绍 1.1 存储器映射 存储器本身无固有地址&#xff0c;是具有特定功能的内存单元。它的地址是由芯片厂商或用户分配&#xff0c;给存储器分配地址的过程就叫做存储区映射…

【CouponHub项目开发】使用RocketMQ5.x实现延时修改优惠券状态,并通过使用模板方法模式重构消息队列发送功能

在上个章节中我实现了创建优惠券模板的功能&#xff0c;但是&#xff0c;优惠券总会有过期时间&#xff0c;我们怎么去解决到期自动修改优惠券状态这样一个功能呢&#xff1f;我们可以使用RocketMQ5.x新出的任意定时发送消息功能来解决。 初始方案&#xff1a;首先在创建优惠券…

Claude Code SDK 配置Gitlab MCP服务

一、MCP配置前期准备 &#xff08;一&#xff09;创建个人令牌/群组令牌 我这里是创建个人令牌&#xff0c;去到首页左上角&#xff0c;点击头像——>偏好设置——>访问令牌——>添加新令牌 &#xff08;二&#xff09;配置mcp信息 去到魔塔社区&#xff0c;点击mc…

Eclipse 常用搜索功能汇总

Eclipse 常用搜索功能汇总 Eclipse 提供了多种搜索功能&#xff0c;帮助开发者快速定位代码、文件、类、方法、API 等资源。以下是详细的使用方法和技巧。 一、常用搜索快捷键快捷键功能描述Ctrl H打开全局搜索对话框&#xff0c;支持文件、Java 代码、任务等多种搜索。Ctrl …

关于Spring的一些理解

Spring整体结构&#xff1a;Spring实际运行场景&#xff1a;基础 Spring启动过程 传统Spring&#xff1a; &#xff08;1&#xff09;初始化准备阶段 &#xff08;2&#xff09;容器创建与注入 &#xff08;3&#xff09;Bean工厂后置处理 &#xff08;4&#xff09;Bean工厂后…