使用pyqt 开发批量文件夹复制到指定文件夹,带列表、进度条详细代码
时间: 2024-01-31 20:04:47 浏览: 68
py批量复制文件夹及其内容
好的,以下是使用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_()
```
希望能帮到你!
阅读全文