实现文件压缩

#压缩软件
import tkinter
import tkinter.messagebox
import zipfile
import tkinter.filedialog
import os

class zip:
    files=()
    def __init__(self):
        self.root=tkinter.Tk()
        self.root.minsize(300,300)
        self.root.resizable(width=False,height=False)
        self.root.title("压缩软件")
        #声明label变量
        self.filenames=tkinter.StringVar()
        self.show()
        self.root.mainloop()

    # 界面布局
    def show(self):
        # 选择文件按钮
        btn1 = tkinter.Button(self.root, text="选择文件",font=("隶书",12,"bold"),command=self.addfiles,)
        btn1.place(x=15, y=20, width=80, height=50)

        # 压缩操作按钮
        btn1 = tkinter.Button(self.root, text="压缩操作",font=("隶书",12,"bold"),command=self.zipfiles)
        btn1.place(x=110, y=20, width=80, height=50)
        # 解压操作按钮
        btn1 = tkinter.Button(self.root, text="解压操作",font=("隶书",12,"bold"), command=self.jieyazip)
        btn1.place(x=205, y=20, width=80, height=50)

        # 显示信息的组件
        label = tkinter.Label(self.root, bg="white", textvariable=self.filenames, justify="left", anchor="nw")
        label.place(x=20, y=80, width=270, height=180)

    #选取文件
    def addfiles(self):
        # 声明全局变量
        #global files
        #使用文件对话框
        self.files=tkinter.filedialog.askopenfilenames(title="请选择要压缩的文件")
        #准备显示信息
        tmpfiles=[]
        #遍历元组  截取和省略操作
        for i in self.files:
            #判断路径字符个数是否超过指定长度
            if len(i) >= 30:
                i=i[0:10]+"......"+ i[-10:]
            #将处理之后的数据存入临时列表
            tmpfiles.append(i)
        #将所有文件路径组成字符串,写入label
        self.filenames.set("\n".join(tmpfiles))
        #提示添加文件成功
        tkinter.messagebox.showinfo(title="添加文件",message="添加文件成功!")
    #压缩文件
    def zipfiles(self):
        global files
        #获取压缩文件的路径
        self.filename=tkinter.filedialog.asksaveasfilename(title="保存文件",filetypes=(("zip 文件","*.zip"),("所有文件","*.*")))
        #新建压缩文件
        self.zp=zipfile.ZipFile(self.filename,"a")
        #添加要压缩的文件
        for i in self.files:
            self.zp.write(i,os.path.basename(i))
        #关闭压缩文件
        self.zp.close()
        #提示用户压缩路径
        tkinter.messagebox.showinfo(title="操作结果",message="压缩成功:"+self.filename)

    #解压文件
    def jieyazip(self):
        #选择解压文件
        self.filepath=tkinter.filedialog.askopenfilename(title="选择解压路径",filetypes=(("zip文件","*.zip"),("所有文件","*.*")))
        #选择解压路径
        self.zippath=tkinter.filedialog.askdirectory(title="选择解压路径")
        #读取解压文件
        self.zp=zipfile.ZipFile(self.filepath,"r")
        #解压所有
        self.zp.extractall(self.zippath)
        #关闭文件
        #self.zp.close()
        #提示用户解压缩消息
        tkinter.messagebox.showinfo(title="操作结果",message="解压缩成功"+self.zippath)
#实例化对象
jieya=zip()

  

posted @ 2017-12-10 18:38  酒逢知己饮,诗向会人吟  阅读(147)  评论(0编辑  收藏  举报