用pyqt5写一个同步文件夹内容的小工具

python+PyQt5实现文件安全传输 提示:文章完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码 阅读详情

详见https://github.com/distiny-cool/File-Synchronization
完整代码在最下面

同步文件夹内容的小工具【点这里直接下载可执行程序

出发点

打算把电脑上的文件备份到外部磁盘上面,但是原来已经备份过了,现在又有所修改,重新复制的话实在太慢,而且有的文件内容更新过了,有冲突时不能直接跳过,所以用pyqt5写了这个小程序用于解决这个问题。

思路

代码注释详细,可以自己修改,也可以供初学者学习pyqt5参考

from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QLineEdit, QPushButton, QMessageBox, QFileDialog, QTextEdit, QHBoxLayout, QVBoxLayout, QWhatsThis
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import QEvent
import shutil
import os
import sys
import ctypes

class SyncFilesWindow(QDialog):
    def __init__(self):
        super().__init__()
        filename = self.resource_path(os.path.join("ico","icon.ico"))
        icon = QIcon()
        icon.addPixmap(QPixmap(filename), QIcon.Normal, QIcon.Off)
        self.setWindowIcon(icon)
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")

        # 创建文本标签和文本框
        self.src_label = QLabel("源文件夹路径:", self)
        self.src_edit = QLineEdit(self)
        self.src_button = QPushButton("选择文件夹", self)
        self.dst_label = QLabel("目标文件夹路径:", self)
        self.dst_edit = QLineEdit(self)
        self.dst_button = QPushButton("选择文件夹", self)

        # 创建文本框用于显示同步的文件名称
        self.log_edit = QTextEdit(self)

        # 创建按钮
        self.sync_button = QPushButton("同步文件", self)

        # 创建水平布局,用于放置文本框和按钮
        hbox_src = QHBoxLayout()
        hbox_src.addWidget(self.src_edit)
        hbox_src.addWidget(self.src_button)
        hbox_dst = QHBoxLayout()
        hbox_dst.addWidget(self.dst_edit)
        hbox_dst.addWidget(self.dst_button)

        # 创建垂直布局
        vbox = QVBoxLayout()
        vbox.addWidget(self.src_label)
        vbox.addLayout(hbox_src)
        vbox.addWidget(self.dst_label)
        vbox.addLayout(hbox_dst)
        vbox.addWidget(self.sync_button)
        vbox.addWidget(self.log_edit)

        # 设置布局
        self.setLayout(vbox)

        # 连接按钮的点击事件和处理函数
        self.src_button.clicked.connect(self.select_src_dir)
        self.dst_button.clicked.connect(self.select_dst_dir)
        self.sync_button.clicked.connect(self.sync_files)

        # 设置窗口的属性
        self.setGeometry(300, 300, 420, 420)
        self.setWindowTitle('文件夹同步工具')

        self.infomation()

    def event(self, event):
        if event.type()==QEvent.EnterWhatsThisMode:
            QWhatsThis.leaveWhatsThisMode()
            QMessageBox.information(self, "关于", "开发:Kody Black\n"+
            "github.com/distiny-cool/File-Synchronization")
        return QDialog.event(self,event)


    def resource_path(self, relative_path):
        if getattr(sys, 'frozen', False): 
            base_path = sys._MEIPASS
        else:
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)

    def select_src_dir(self):
        # 调用 QFileDialog.getExistingDirectory() 函数弹出文件夹选择对话框
        src_dir = QFileDialog.getExistingDirectory(self, "选择源文件夹")
        # 如果用户选择了文件夹,则在文本框中显示文件夹路径
        if src_dir:
            self.src_edit.setText(src_dir)

    def select_dst_dir(self):
        # 调用 QFileDialog.getExistingDirectory() 函数弹出文件夹选择对话框
        dst_dir = QFileDialog.getExistingDirectory(self, "选择目标文件夹")
        # 如果用户选择了文件夹,则在文本框中显示文件夹路径
        if dst_dir:
            self.dst_edit.setText(dst_dir)

    def infomation(self):
        self.log_edit.append('<font color="#0078d4"><b>功能介绍:</b></font>'+'<p>'+
        '本软件会把源文件夹和目标文件夹中不同的内容复制到目标文件夹里,完全相同的文件则直接跳过,以节省你的复制时间'+'<p>'+
        '<font color="#d83b01"><b>注意:</b></font><ul><li>目标文件夹不允许是源文件夹的子文件夹</li>'+
        '<li>如果有相同的文件,则在目标文件夹中会保留最近修改过的文件</li></ul>'+
        '<p style="text-align: right;"><font color="#6e9bc5">'+'<b> by:Kody </b></font></p>')

    def sync_files(self):
        # 获取文本框中的路径
        src_dir = self.src_edit.text()
        dst_dir = self.dst_edit.text()

        self.log_edit.clear()

        if not os.path.exists(src_dir):
            QMessageBox.warning(self, "错误", "源文件夹不存在!")
            return

        if not os.path.exists(dst_dir):
            QMessageBox.warning(self, "错误", "目标文件夹不存在!")
            return
        
        # 递归同步文件夹和文件
        def sync_files(src_dir, dst_dir) -> int:

            # 如果目标文件夹不存在,则创建目标文件夹
            if not os.path.exists(dst_dir):
                os.makedirs(dst_dir)
            
            # 遍历源文件夹中的文件
            for src_path in os.listdir(src_dir):
                src_path = os.path.join(src_dir, src_path)
                dst_path = os.path.join(dst_dir, src_path.split(os.sep)[-1])

                # 如果是文件夹,则递归处理
                if os.path.isdir(src_path):
                    sync_files(src_path, dst_path)
                # 如果是文件,则复制文件
                else:
                    # 如果文件已经存在,则比较时间戳
                    if os.path.exists(dst_path):
                        # 获取文件的时间戳
                        src_mtime = os.path.getmtime(src_path)
                        dst_mtime = os.path.getmtime(dst_path)

                        # 如果源文件的时间戳更新,则复制文件
                        if src_mtime > dst_mtime:
                            self.log_edit.append("正在复制文件: " + src_path)
                            shutil.copy2(src_path, dst_path)
                    else:
                        # 将文件复制到目标文件夹
                        self.log_edit.append("正在复制文件: " + src_path)
                        shutil.copy2(src_path, dst_path)
            return 1

        # 调用递归函数同步文件
        if sync_files(src_dir, dst_dir):
            QMessageBox.information(self, "提示", "文件同步成功!")
        else:
            QMessageBox.critical(self, "错误", "文件同步失败!")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = SyncFilesWindow()
    window.show()
    sys.exit(app.exec_())

⭐️欢迎star&关注

PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像 一、环境配置 1.1 安装PyQt5 按住win+R输入cmd在命令行下使用pip安装,但是需要SIP的支持,所以先安装SIP,再安装pyqt5 pip install sip 由于安装默认使用国外的镜像,可能因为网络问题会导致下载慢或者失败的现象。所以我们可以使用国内的镜像,比如清华的镜像源:https://pypi.tuna.tsinghua.edu.cn/simple pip install sip -i https://pypi.tuna.tsinghua.edu.cn/simpl.. 阅读详情

相关推荐

在不同版本Python中安装PyQT5PyQT5-Tools

在不同版本Python中安装PyQT5PyQT5-Tools

zoomgu680的博客 2万+

基于Python3.8.2+PyQt5 5.14.2开发的跨平台(MacOS、Windows、Linux)的简单文件加解密工具

基于Python3.8.2+PyQt5 5.14.2开发的跨平台(MacOS、Windows、Linux)的简单文件加解密工具

使用adb+PyQt5制作一个手机自动化的小工具

背景介绍 这是一个从今年双十一时候产生的一个想法,好多平台上都有很多羊毛可以薅,每天签到啊什么的,然后每天去点就很烦,希望做一个自动化的小工具去让程序去自动完成各种签到,浏览什么的。 正好赶上崴脚下不了地,只能宅在宿舍,而且最难的最优化也考完了,就利用这段时间把这个想法实现了一下。 程序应包含如下几个功能 有一个窗口专门用来显示手机的屏幕,在这个窗口上的点击和滑动应该能映射到手机的点击和滑动。并...

buaalzm 2743

毕业设计:一套客户端跨平台的网络同步盘系统,采用C++编,客户端使用了Qt.zip

本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!!

七、PyQt5文件及文件夹操作(高级应用篇)

使用os模块、os.path模块和shutil模块操作文件和文件夹,使用PyQt5中的QFile类和QDir类对文件和文件夹操作。

ungoing的博客 1万+

Python3 PyQt5文本浏览框QTextBrowser实现文件拖入显示路径及读取文件内容时不会自动换行

QTextBrowser提供了可以显示文本的对话框,接下来利用这个实现拖拽文件显示文件路径 import os import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * class Example(QMainWindow): def __init__(self): super(Example...

weixin_41611054的博客 5930

利用pyqt5个界面

利用pyqt5个界面一、python GUI开发工具有哪些二、计件数据采集界面开发流程2.1 软件安装2.2 Qt Designer设计界面2.3 .ui文件转.py文件2.4 测试窗口效果,建立逻辑事件2.5 pyinstaller打包程序三、学习资料 一、python GUI开发工具有哪些 1.Tkinter Tkinter 似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui库,也是opensource的产物。Tkinter可用于windows/linux/

treelly的博客 9596

PyQt5按下按键选择文件夹并显示

问题:使用PyQt5开发桌面程序,实现功能为:按下按键,打开文件夹,选择文件夹,并将路径显示出来。 解决方法: 一、主要函数(直接能运行的代码见二) 1、选择文件夹并显示 def msg(self,Filepath): directory = QtWidgets.QFileDialog.getExistingDirectory(None,"选取文件夹","C:/") # 起始路径 self.fileT.setText(directory) 2、选择文件 d

AI414010的博客 2万+

Synkron1.6.2(文件夹同步qt)

Synkron1.6.2(文件夹同步qt)

基于PyQt5实现的PDF小工具

基于PyQt5实现的PDF工具箱 完整项目详见PDFTools 功能:批量添加目录,图像增强,PDF拆分,PDF合并 文章目录基于PyQt5实现的PDF工具箱前言1. 使用模块2. 编辑环境搭建3.工具箱功能概述4.步骤解析5.项目组成6.主要代码展示 ,完整项目详见[PDFTools](https://github.com/devxzh/PDFTools)7.ToDo List8.结语9.参考 前言 PDF 是一种便携,易查找的电子书,在学习工作中我们可能需要翻阅大量的参考书籍,实体书往往贵且笨重,.

devxzh 3997

PYQT5安装以及 PYQT integration 在vscode中的配置

介绍 Pyqt 再 Vscode 中的环境配置,以及大致的使用方式

LQ_001的博客 5124

Python 利用PyQt5一个简易的串口助手

学习单片机,STM32好长时间了,也做了一些项目,一直想利用上位机实现电脑与单片机之间的传输数据,利用串口助手是最直接的通信方式,但串口助手不适合做上位机,如果会串口助手的软件,基本能自己一个上位机,历时一个月,终于一个简易的串口助手,笔者自己软件,有些Bug,分享出来,仅供参考,欢迎大家一起学习与讨论。 目标:利用Python语言一个简易的串口助手 ...

scx2006114的博客 1万+

PyQtPyQt5入门

最近接了一个小项目,主要任务是完成一个界面的设计,而且是基于Python,我第一反应就是使用大名鼎鼎的Qt来设计。Qt最早是用C语言开发的,但是后来也有了基于Python的第三方包,目前最新版是PyQt6.3,但是这个项目中使用的还是普及度更高的PyQt5。正好我也比较喜欢Python编程,于是边学边做,简单总结一些入门要点,授人与渔。

记录学习成长之路,进一寸有进一寸的欢喜 1万+

python3GUI--图片浏览器By:PyQt5(附源码

本次使用PyQt5开发一款图片浏览器,本篇主要练习QDockWidget、QTreeWidget,软件打包好放在了文末,可自取。本次练习了PyQt5相关组件使用,制作了一款图片浏览器,可以按照目录级别预览图片,支持放大、缩小、查看信息,实现功能比较基础,整体UI风格为PyQt5原生ui风格,未使用QSS做具体细节绘制。软件打包好放在了这里,解压后大小为37.5M。

懷淰メ的博客 3439

pyqt5一个窗口程序,实现显示文件夹目录树和预览文档的功能

请确保已安装PyQt5库,并将代码保存为文件,例如"file_explorer.py",然后运行该文件即可启动窗口程序。由于无法提供实时数据,无法准确列出当前所有使用该功能的产品。鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)下面是一个使用PyQt5的窗口程序示例,实现显示文件夹目录树和预览文档的功能。

走向CTO的路上... 1053

Python的简易文件同步工具(已解决大文件同步时内存溢出问题)

个人工作时,会出现有两台或多台电脑需要同步一些文件的情况,但是因为公司文档的私密性,又不能上传网盘,就算有群晖,但是一直开着检测目录变化的功能,又有点浪费电脑性能,所以就用python了如下的小脚本,方便同步数据,因为系统占用很低,让它一直开着后台运行,也不至于影响工作,如果目标目录已有一样的文件也能很好的跳过,至于同步大文件时,内存泄漏问题,我也通过使用python的yield循环每次读取很小的部分(1024*8)解决了,还有因为有时文件比较多,一下同步不好,可以先中断,下次继续同步

donglxd的博客 1054

pyqt 开源项目源码阅读

button继承结构:打开qt设计师qwidget:大概有的功能:0:设置对象id1:设置可用2: 设置 当前的xy位置 与宽高3:设置字体4:设置移动的光标形状5:设置提示信息6:设置qss样式1: 设置文本2: 设置图标3: 设置图标大小需求:光标移动到组件, 离开组件,和按下组件的时候改变颜色。设计思路:定义3个状态的枚举类型, 定义进入,离开,按下三类事件,控制button状态。通过_getColors方法获取当前状态下的颜色, 由子类完成动画绘制。NORMAL = 0。

qq_27172615的博客 570

Python PyQt5 QtreeView 树形结构下获取指定路径,显示目录下所有文件

最近在做Python页面逻辑功能的过程中,想实现一个文件筛选的功能,但是在网上找了一下,没有找到相类似的,大多都是一些C++的代码段,经过不断的摸索,终于把这个功能做出来了,希望大家做类似功能,能够对你有所帮助。 功能如下需求: 左半部分是QtreeView生成的系统树形文件夹结构(只显示文件夹),右半部分通过在QtreeView中双击点中某个文件夹后,在右边的窗口中会显示出这个文件夹中的所有文件(只显示文件)。都来通过Python中QFileSystemModel进行获取Windo...

Creator丶小鑫的博客 1万+
上一篇: 获取PowerShell的所有历史记录
Distiny`~
博客等级 码龄7年 1038粉丝 9原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值