直接上代码:
#coding=utf-8
import tkinter
import tkinter.filedialog
import zipfile
import os
import tkinter.simpledialog
import tkinter.messagebox
class Compress :
def __init__(self):
self.list1=[]
self.root = tkinter.Tk()
self.window()
self.btn()
self.root.mainloop()
def window(self):
self.root.minsize(550, 500)
self.btn1 = tkinter.Button(self.root, text='文件类型')
self.btn1.place(x=50, y=50,width=100,height=60)
self.btn2 = tkinter.Button(self.root, text='压缩文件')
self.btn2.place(x=220, y=50,width=100,height=60)
self.btn3 = tkinter.Button(self.root, text='解压文件')
self.btn3.place(x=390, y=50,width=100,height=60)
self.label = tkinter.Label(self.root, text='请选择文件', bg='white', anchor='nw', justify='left',font=('微软雅黑',13))
self.label.place(x=50, y=120, width=440, height=370)
def Un_zip(self,e):
# 解压文件
jieyalujing = tkinter.filedialog.askopenfilenames(title='选择解压文件', filetypes=[('zip文件', '*.zip')])
if len(jieyalujing) > 0:
dirpath = tkinter.filedialog.askdirectory(title='选择解压路径')
bol = bool(dirpath)
if bol == True:
zp = zipfile.ZipFile(jieyalujing, 'r', zipfile.ZIP_DEFLATED)
zp.extractall(dirpath)
tkinter.messagebox.showinfo(title='结果', message='文件解压成功,路径为:' + dirpath)
zp.close()
else:
tkinter.messagebox.showinfo(title='提示', message='您提前退出解压失败')
# 定义选择文件的按钮
def xuanze(self,e):
t = tkinter.Toplevel()
t.minsize(310, 300)
t.title('请选择压缩的文件类型')
btn10 = tkinter.Button(t, text='文件', command=self.file)
btn10.place(x=50, y=100, width=80, height=60)
btn20 = tkinter.Button(t, text='文件夹', command=self.dir)
btn20.place(x=140, y=100, width=80, height=60)
# 循环窗口
t.mainloop()
def dir(self):
# 弹出选择文件夹的窗口 并将选择的文件夹路径显示到label上
self.dir_path = tkinter.filedialog.askdirectory(title='请选择要压缩的文件夹')
if len(self.dir_path)>0:
# os.listdit获取文件夹中的文件
self.list1 += list(os.listdir(self.dir_path))
self.label['text'] = '\n'.join(self.list1)
else:
self.list1.clear()
self.label['text'] =('请选择文件')
def file(self):
# 弹出选择文件的窗口 并将选择的文件路径显示到label上
file_path = tkinter.filedialog.askopenfilenames(title='请选择要压缩的文件', initialdir='C:\ ')
if len(file_path) > 0:
self.list1 += list(file_path)
# print(list1)
self.label['text'] = '\n'.join(self.list1)
else:
self.list1.clear()
self.label['text'] =('请选择文件')
def yasuo(self,e):
if len(self.list1)>0:
# 获取存放压缩文件的路径
ysfile = tkinter.filedialog.asksaveasfilename(title='文件另存为', filetypes=(('zip文件', '*.zip'),))
if len(ysfile)>0:
#创建压缩文件
zp=zipfile.ZipFile(ysfile+'.zip','w',zipfile.ZIP_DEFLATED)
#取出要压缩的文件
for path1 in self.list1:
if os.path.isabs(path1):
# 放入压缩文件
zp.write(path1, os.path.basename(path1))
else:
zp.write(self.dir_path + '/' + path1, os.path.basename(path1))
# print(os.path.dirname(self.dir_path)) + path1
zp.close()
tkinter.messagebox.showinfo(title='结果', message='文件压缩成功,路径为:' + ysfile)
else:
self.list1.clear()
self.label['text'] = ('请选择文件')
else:
tkinter.messagebox.showerror('提示','请选择解压的文件')
def btn(self):
self.btn3.bind('<ButtonRelease-1>', self.Un_zip)
self.btn2.bind('<ButtonRelease-1>',self.yasuo)
self.btn1.bind('<ButtonRelease-1>',self.xuanze)
ys=Compress()
注意:
1.上面设计到使用python开发的图形库tkiner,最好使用python3.0以上的版本,我自己没有找到3.0以下的图形库。
2.这个只能解压本程序打包的zip格式的压缩文件,我自己试了一下,用别的软件进行打包,然后用这个程序解压,发现解压失败。