一、软件描述

用Python tkinter模块写一款属于自己的压缩软件。zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile来操作zip文件,具有功能:zip压缩功能,zip解压功能。(功能较少,比较low,大神勿喷。)

二、所需知识点

  • 函数的运用
  • 全局变量的运用
  • tkinter模块
  • zip模块

三、程序实现流程分析

  1. 用tkinter模块创建一个压缩软件界面,主要用到界面功能,按钮功能(打开软件,压缩文件,解压文件),标签(路径显示对话框)
  2. 定义三个函数,打开文件函数,压缩文件函数,加压文件函数。分别与‘打开文件’按钮,‘压缩文件’ 按钮, ‘解压文件’  按钮绑定
  3. 给函数中添加功能

四、代码如下

 import tkinter
import tkinter.filedialog
import os
import zipfile
import tkinter.messagebox #创建住窗口
root = tkinter.Tk()
root.minsize(700,500)
root.title('李蛟龙的压缩软件')
root['bg'] = '#303030' #声明一个全局变量files
files = ()
#声明lable的使用变量
filenames = tkinter.StringVar()
#1.选取文件操作
def selecfiles():
#声明全局变量
global files
#使用文件对话框选择文件
files = tkinter.filedialog.askopenfilenames(title = '选择你要要做的软件bitch')
#显示选中文件的信息
#临时的路径容器
tmpfiles = []
for i in files:
if len(i) > 60:
i = i[0:20] + '...' + i[-15:]
tmpfiles.append(i)
filestr = '\n'.join(tmpfiles)
print(filestr)
filenames.set(filestr) #在标签中显示文件名称 #2.压缩文件函数
def zipfiles():
global files
#获取压缩文件的路径
filename = tkinter.filedialog.asksaveasfilename(title = '保存文件',filetypes = (('zip 文件','*.zip'),('所有文件','*.*')))
#新建压缩文件
zp = zipfile.ZipFile(filename +'.zip','a') #压缩文件默认zip格式
#添加要压缩的文件(遍历操作
for onefiles in files:
zp.write(onefiles,os.path.basename(onefiles))
zp.close()#创建完成
#提示用户压缩路径
tkinter.messagebox.showinfo(title = '操作结果',message = '压缩成功:' + filename) #3.解压操作函数
def uncompress():
global files # 使用文件对话框选择文件
files = tkinter.filedialog.askopenfilenames(title='选择你要要做的软件bitch')
# 显示选中文件的信息
# 临时的路径容器
tmpfiles = []
for i in files:
if len(i) > 60:
i = i[0:20] + '...' + i[-15:]
tmpfiles.append(i)
filestr = '\n'.join(tmpfiles)
print(filestr)
filenames.set(filestr) zp = zipfile.ZipFile(filestr, 'r')
# 添加要压缩的文件(遍历操作
#for onefiles in files:
files1 = tkinter.filedialog.askdirectory(title = '选择您要解压的路径')
zp.extractall(files1)
zp.close() # 解压完成
#提示用户压缩路径
tkinter.messagebox.showinfo(title = '操作结果',message = '解压成功:'+ files1) #界面布局
#菜单栏
allmenu = tkinter.Menu(root,bg = 'black') filmenu = tkinter.Menu(allmenu,tearoff = 0)
filmenu.add_command(label = '打开')
filmenu.add_command(label = '保存')
filmenu.add_separator()
filmenu.add_command(label = '设置')
filmenu.add_command(label = '退出') filmenu1 = tkinter.Menu(allmenu,tearoff = 0)
filmenu1.add_command(label = '打开')
filmenu1.add_command(label = '保存')
filmenu1.add_separator()
filmenu1.add_command(label = '设置')
filmenu1.add_command(label = '退出') allmenu.add_cascade(label = '文件',menu = filmenu)
allmenu.add_cascade(label = '编辑',menu = filmenu1)
allmenu.add_cascade(label = '工具') root.config(menu = allmenu,bg = 'black') #添加按钮界面
label = tkinter.Label(root,bg = '#242424')
label.place(width = 700,height = 115)
#1.添加文件按钮
btnadd = tkinter.Button(root,text = '选择文件',bg = '#242424',bd = 0.5,fg = 'grey',command = selecfiles)
btnadd.place(x = 100,y = 70,width = '',height = 30)
#2.压缩操作按钮
btnadd = tkinter.Button(root,text = '压缩文件',bg = '#242424',bd = 0.5,fg = 'grey',command = zipfiles)
btnadd.place(x = 300,y = 70,width = '',height = 30)
#3.解压操作按钮
btnadd = tkinter.Button(root,text = '解压文件',bg = '#242424',bd = 0.5,fg = 'grey',command = uncompress)
btnadd.place(x = 500,y = 70,width = '',height = 30) img1 = tkinter.PhotoImage(file = '1.gif')
labelg1 = tkinter.Label(root,image = img1)
labelg1.place(x = 115,y =15,width = 50,height = 50) img2 = tkinter.PhotoImage(file = '2.gif')
labelg2 = tkinter.Label(root,image = img2)
labelg2.place(x = 317,y =15,width = 50,height = 50) img3 = tkinter.PhotoImage(file = '1.gif')
labelg3 = tkinter.Label(root,image = img1)
labelg3.place(x = 515,y =15,width = 50,height = 50) #4显示信息的组件
label = tkinter.Label(root,bg = '#F2F2F2',textvariable = filenames,anchor = 'nw',justify = 'left')
label.place(x= 5,y = 115,width = '',height = '') root.mainloop()

五、完成效果图

用Python写一款属于自己的 简易zip压缩软件 附完成图(适合初学者)的更多相关文章

  1. 教你用python写:HDU刷题神器

    声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...

  2. 如何Python写一个安卓APP

    前言:用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择,而且实在不想学习Java,再者,就编程而言已经会的就Python与Golang(注:Python,Golang水平都一般 ...

  3. 用python写桌面天气预报,自己的学习曲线。

    自从接触python,就被他优雅而简洁的代码所吸引. 举个例子: arr , , , , , , , , , , , , , ] ] 如果用其他语言来写的吗,不会这么简洁,美观.   python还有 ...

  4. Python knife 一款伪菜刀

    Python knife ​ 一款伪菜刀. ​ 设计之初,本想只写个命令行的就可以了,但又想与众不同,想用python写代码,又不想用c#写前端(c#太卡了),万分无奈之下,找到一个替代品,Pyqt, ...

  5. Python写各大聊天系统的屏蔽脏话功能原理

    Python写各大聊天系统的屏蔽脏话功能原理 突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时 ...

  6. python写红包的原理流程包含random,lambda其中的使用和见简单介绍

    Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...

  7. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

  8. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  9. 读书笔记汇总 --- 用Python写网络爬虫

    本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...

随机推荐

  1. iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

    .最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有 ...

  2. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  3. .NET下发送邮件遇到问题及解决方案

    .NET后台代码利用QQ邮箱服务器发送邮件遇到的问题: "mail from address must be same as authorization user" 首先,看下我的 ...

  4. C++大数精度计算(带小数点)

    转: (原出处不可考,若有侵权,请联系我立即删除) 头文件: // WTNumber.h: interface for the CWTNumber class. // //////////////// ...

  5. MapReduce-实践1

      MR进阶实践1:  -file 分发多个文件 [-file 适合场景]分发文件在本地,小文件 -file分发原理         run.sh文件: 通过多个-file, 将多个本地文件分发到Ha ...

  6. JqueryMobile基础之创建页面

    首先简答介绍一下JQueryMobile吧,我觉得用一句话来讲就是可以 "写更少的代码,做更多的事情" : 它可以通过一个灵活及简单的方式来布局网页,且兼容所有移动设备.这也是我自 ...

  7. C#常用单元测试框架比较:XUnit, NUnit, 和 Visual Studio(MSTest)

    做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处. 地址在这里:http://www.tuicool.com ...

  8. 关于VRTK的使用(一)—— VR开发环境搭建

    首先在Hierarchy窗口中添加GameEmpty,并重命名为VRTK.然后给VRTK添加一个子容器命名为SteamVR.从Asset Store导入SteamVR Plugin: 然后分别选中预制 ...

  9. VC++6.0在win8.1系统下运行失败的解决办法

    在win8.1系统下安装了VC++6,.0编译软件之后,发现打不开.出现下面的错误: 解决办法: 安装文件目录:Microsoft Visual Studio--common--MSDev98--Bi ...

  10. js原生API妙用(一)

    复制数组 我们都知道数组是引用类型数据.这里使用slice复制一个数组,原数组不受影响. let list1 = [1, 2, 3, 4]; let newList = list1.slice(); ...