使用pyqt 开发批量文件夹复制到指定文件夹,带列表、进度条详细代码

时间: 2024-01-31 08:04:47 浏览: 22
好的,以下是使用pyqt开发批量文件夹复制到指定文件夹并带有列表和进度条的详细代码: ```python import os import shutil from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QHBoxLayout, QVBoxLayout, QListWidget, QPushButton, QProgressBar, QLabel class MainWindow(QWidget): def __init__(self): super().__init__() # 初始化窗口大小 self.setGeometry(100, 100, 700, 250) # 创建列表控件和进度条控件 self.list_widget = QListWidget() self.progress_bar = QProgressBar() # 创建开始复制按钮和选择文件夹按钮 self.copy_button = QPushButton('开始复制') self.select_dir_button = QPushButton('选择文件夹') # 创建标签控件 self.dir_label = QLabel('目标文件夹:') # 创建横向和纵向布局管理器 self.h_layout = QHBoxLayout() self.v_layout = QVBoxLayout() # 将列表控件和进度条控件加入横向布局管理器 self.h_layout.addWidget(self.list_widget) self.h_layout.addWidget(self.progress_bar) # 将开始复制按钮和选择文件夹按钮加入横向布局管理器 self.h_layout.addWidget(self.copy_button) self.h_layout.addWidget(self.select_dir_button) # 将标签控件加入纵向布局管理器 self.v_layout.addWidget(self.dir_label) # 将横向布局管理器和纵向布局管理器加入主窗口 self.v_layout.addLayout(self.h_layout) self.setLayout(self.v_layout) # 将选择文件夹按钮绑定事件处理函数 self.select_dir_button.clicked.connect(self.select_dir) # 将开始复制按钮绑定事件处理函数 self.copy_button.clicked.connect(self.start_copy) # 初始化目标文件夹为None self.target_dir = None def select_dir(self): # 弹出文件选择框,选择目标文件夹 selected_dir = str(QFileDialog.getExistingDirectory(self, '选择目标文件夹')) # 如果选择的目标文件夹不为空,则将目标文件夹赋值给self.target_dir,并将self.dir_label的文本修改为目标文件夹的路径 if selected_dir: self.target_dir = selected_dir self.dir_label.setText(f'目标文件夹:{self.target_dir}') def start_copy(self): # 如果目标文件夹未选择,则返回 if self.target_dir is None: return # 获取选择的文件夹中的所有子文件夹和文件 selected_items = self.list_widget.selectedItems() # 如果没有选择任何子文件夹和文件,则返回 if not selected_items: return # 创建总数和当前计数变量 total_count = len(selected_items) current_count = 0 # 设置进度条的最小值和最大值 self.progress_bar.setMinimum(0) self.progress_bar.setMaximum(total_count) # 遍历选择的文件夹中的所有子文件夹和文件,并将其复制到目标文件夹中 for item in selected_items: item_path = item.text() # 如果当前项目是文件夹,则在目标文件夹中创建同名文件夹 if os.path.isdir(item_path): target_path = os.path.join(self.target_dir, os.path.basename(item_path)) shutil.copytree(item_path, target_path) # 如果当前项目是文件,则将其复制到目标文件夹中 elif os.path.isfile(item_path): shutil.copy(item_path, self.target_dir) # 更新进度条的值 current_count += 1 self.progress_bar.setValue(current_count) # 复制完成后,清空列表控件和目标文件夹变量 self.target_dir = None self.dir_label.setText('目标文件夹:') self.list_widget.clear() if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 希望能帮到你!

相关推荐

最新推荐

recommend-type

python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法

主要介绍了python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例

主要介绍了python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例

主要介绍了python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法

主要介绍了python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例

主要介绍了python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。