文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何用Python写一个带图形界面的文件压缩软件

2023-06-02 06:12

关注

这期内容当中小编将会给大家带来有关如何用Python写一个带图形界面的文件压缩软件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

文件压缩和解压我们在日常工作学习中会经常用到,比如winrar、快压、好压等压缩软件

如何用Python写一个带图形界面的文件压缩软件

打开之后的界面长这个样子:

如何用Python写一个带图形界面的文件压缩软件

压缩完成后是这个样子:

如何用Python写一个带图形界面的文件压缩软件

解压完成后是这个样子:

如何用Python写一个带图形界面的文件压缩软件

Python压缩软件程序实现和分析过程

首先不像商业压缩软件,我把功能简化了很多,只实现主要的压缩(压缩文件和文件夹)和解压功能。

Python有一些第三方压缩和解压的库,我选用了zipfile,把文件压缩为.zip,图形化选用了pyqt5,因为之前翻译软件实现过图形化,所以就偷懒拿过来改一下用。

程序的运行流程是(对照上面的图看):

首先在下拉框选择是“压缩”还是“解压”,然后点击“选择“按钮选择要执行的文件,选择完成后点击右下角的“开始”按钮,软件就开始执行了。

整个过程比较简单,主要两个地方卡壳了一下,耗了点时间去解决。

Python压缩程序第一个卡壳地方是:

因为要实现压缩文件和文件夹的功能,所以当点击图形界面的”选择“按钮时要支持既能选择文件,又能选择文件夹。

如何用Python写一个带图形界面的文件压缩软件

但是Qt的QFileDialog不支持这样的实现,提供的控件要么只能选文件,要么只能选文件夹,对此花了好几个小时去研究和查阅资料,得出的结论是要继承QFileDialog类,然后重写这个类的部分方法来,实现既能选文件又能选文件夹的功能,于是趟坑去实现了一把,对Qt本身的机制也是一知半解,所以调试了很久。

重新实现的QFileDialog类代码如下:

class FileDialog(QtWidgets.QFileDialog):    def __init__(self, *args, **kwargs):        super(FileDialog, self).__init__(*args, **kwargs)        self.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True)        self.setFileMode(QtWidgets.QFileDialog.ExistingFiles)        self.tree = self.findChild(QtWidgets.QTreeView)        self._selFile = ''    def accept(self):        inds = self.tree.selectionModel().selectedIndexes()        self._selFile = os.path.join(str(self.directory().absolutePath()),str(inds[0].data()))        print('_selfile:',self._selFile)        self.hide()    def selectedFiles(self):        return self._selFile

第二个Pyhthon压缩程序卡壳的地方是:

我把整个程序都写完了,测试了几把没有问题,自己沾沾自喜这个程序真完美。第二天又想起了,想再完整的测试一下,毕竟要写在猿人学公众号上,被人挑刺心里总是不好受的。结果发现压缩时会把你的整个文件路径上的文件夹都压缩进去。

举个栗子:

比如要压缩的文件路径是:D:/log/nginx/access.log

压缩是:D:/log/nginx/access.zip

解压后,正常情况应该是把文件还原为:

D:/log/nginx/access/access.log

但是实际上解压后变成了:

D:/log/nginx/access/log/nginx/access.log

就是程序在压缩的时候把文件路径上的目录也都压缩进去了。

这也调试了好一会,开始以为是把文件路径给传错了。

结果是自己对zipfile的使用没研究清楚,错误示例如下:

z = zipfile.Zipfile('D:/log/nginx/access.zip')z.write('D:/log/nginx/access.log')z.close()

这样就会把文件路径上的目录全都压缩进去。正确的用法是:

z = zipfile.Zipfile('D:/log/nginx/access.zip')z.write('D:/log/nginx/access.log','access.log')z.close()

为什么头一天测试没有发现这个问题呢?

因为我之前测试要压缩的文件路径是这样的:D:/access.log

文件在根目录下面,文件路径上没有其他目录了,所以就发现不了。

这也告诉我们测试一定要多角度,多场景测试啊。

两个Python源文件,200多行代码搞定,再一次感叹用Python就是方便。

把Python压缩程序打包成exe文件

一样可以使用pyinstaller把程序打包成exe文件,就可以把exe文件发给其他朋友使用了,他们的电脑没有Python开发环境也能运行此程序,当然为了程序稳定,你最好多在几台电脑上测试一下。

打包命令:

pyinstaller -F -w -i icon.ico transdocx.py

Python压缩程序文件结构:

一个zip_main.py文件(图形界面),一个zip_console.py文件(压缩功能),开发图形界面程序通常是这样,把图形界面部分和业务功能部分要分离,相互不干扰,也方便以后修改。

程序运行方法:python zip_main.py

Python压缩程序****不足之处

这个程序只能压缩和解压zip文件,不支持rar、tar。

没有严格的容错处理

不支持加密压缩和解压

上述就是小编为大家分享的如何用Python写一个带图形界面的文件压缩软件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯