您的位置:首页 > 编程语言 > Python开发

Python(15)python使用tkinter实现一个简单的压缩/解压程序

2017-12-29 11:08 1161 查看
class Zipper:
    #Zipper
    #引入相关模块
    import tkinter as tk               #tkinter模块
    import tkinter.filedialog as fd    #文件选取模块
    import tkinter.messagebox as mbox  #弹窗消息模块
    import os                          #os模块
    import zipfile                     #压缩模块

    #Zipper类构造函数
    def __init__(self):
        #创建一个窗口
        self.window = self.tk.Tk()
        #设置窗口title
        self.window.title('MY Zipper v1.0')
        #设置窗口宽高
        self.window.maxsize(500, 430)
        self.window.minsize(500, 430)
        #设置菜单
        self.set_menu()
        #设置界面按钮
        self.set_show()
        #显示选中文件的label
        self.label_show = self.tk.Label(self.window, text='暂时没有文件信息', bg='white', anchor='nw', justify='left')
        self.label_show.place(x=20, y=70, width=463, height=310)
        #压缩文件路径list
        self.zipFileName = []
        #window放入主消息队列
        self.window.mainloop()

    #设置菜单
    def set_menu(self):
        #菜单设置

        #创建总菜单
        menubar = self.tk.Menu(self.window)
        #创建一个下拉菜单,并且加入文件菜单
        filemenu = self.tk.Menu(menubar, tearoff=0)
        #创建下来菜单的选项
        filemenu.add_command(label="退出Zipper", command=self.window.quit)

        def show_author():
            self.mbox.showinfo(message='Wiz333@XDL 2017')

        filemenu.add_command(label="作者", command=show_author)
        #将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作
        menubar.add_cascade(label="操作", menu=filemenu)
        #显示总菜单
        self.window.config(menu=menubar)

    #设置界面按钮,显示框等布局
    def set_show(self):
        #摆放按钮区域

        #添加文件BTN
        btn_add = self.tk.Button(self.window, text='添加文件', command=self.add_file)
        btn_add.place(x=120, y=20)
        #压缩文件BTN
        btn_zip = self.tk.Button(self.window, text='压缩文件', command=self.zip_file)
        btn_zip.place(x=210, y=20)
        #解压文件BTN
        btn_unzip = self.tk.Button(self.window, text='解压文件', command=self.unzip_file)
        btn_unzip.place(x=300, y=20)

    #调用函数区域
    #重置label的内容
    def reset_show(self):
        #清空label显示
        self.label_show['text'] = '暂时没有文件信息'

    #添加文件函数
    def add_file(self):
        #弹出文件选择框
        files = self.fd.askopenfilenames(title='选择需要压缩的文件')
        #将文件选择框返回元组存入list
        self.zipFileName += list(files)
        #将列表拼接成回行的字符串
        str_show = '\n'.join(self.zipFileName)
        #label中显示路径字符串
        self.label_show['text'] = str_show

    #压缩文件函数
    def zip_file(self):
        #获取解压到的目录
        zip_path = self.fd.askdirectory(title='请选择压缩到哪里')
        zip_path += '/zip_test.zip'
        #异常捕获
        try:
            #打开或创建压缩文件对象
            file = self.zipfile.ZipFile(zip_path, 'w', self.zipfile.ZIP_DEFLATED)  # zipfile.ZIP_DEFLATED 打开对文件进行压缩选项
            #添加文件
            for v in self.zipFileName:
                file.write(v, self.os.path.basename(v))
            #关闭压缩文件对象
            file.close()
            #文件压缩成功,给出提示
            if self.os.path.exists(zip_path):
                self.mbox.showinfo(title='提示', message='文件成功压缩至-> ' + zip_path)
            #清空label显示
            self.reset_show()
        except PermissionError:
            self.mbox.showerror(title='错误', message='Permission Denied')
            #清空label显示
            self.reset_show()
        except:
            self.mbox.showerror(title='错误', message='压缩失败')
            #清空label显示
            self.reset_show()

    #解压文件函数
    def unzip_file(self):
        #异常捕获
        try:
            #获取需要解压的文件
            unzipFile = self.fd.askopenfilename(title='请选择需要解压的zip')
            #选取解压文件到的路径
            unzipFilePath = self.fd.askdirectory(title='请选择解压到的路径')
            #创建一个压缩对象
            file = self.zipfile.ZipFile(unzipFile)
            #解压所有
            file.extractall(unzipFilePath)
            #关闭压缩对象
            file.close()
            #解压成功,给出提示
            self.mbox.showinfo(title='提示', message='文件成功解压至-> ' + unzipFilePath)
            #清空label显示
            self.reset_show()
        except:
            self.mbox.showerror(title='错误', message='解压失败')
            #清空label显示
            self.reset_show()

#实例化Zipper类对象
wiz = Zipper()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tkinter python 压缩 解压