#压缩软件 import os import zipfile import tkinter import tkinter.filedialog import tkinter.messagebox ''' 压缩 1.选择文件按钮 目的:选择要压缩的文件 2.选择文件夹按钮 目的:选择要压缩的文件夹 3.压缩文件按钮 目的:选择压缩后的文件要存入的文件路径 (这个文件要新建,还需要给他取一个帅气的名字) 3.注意事项:要先选择文件或文件夹 4.特点:压缩和解压两个操作是独立分开的 解压 1.选择文件按钮 目的:选择要解压的文件 2.解压文件按钮 目的:选择解压后的文件要存入的文件夹路径 (这个文件夹要新建,还需要给他取一个漂亮的名字) 3.注意事项:在点击压缩文件按钮并压缩文件成功后 不能立刻点击解压文件按钮,要先选择文件,即点击选择文件按钮 4.优点:能够在对话框里面自主选择解压的文件和解压文件的目标文件夹 5.缺点:不能在压缩文件后立即点击解压文件按钮 6.特点:压缩和解压两个操作是独立分开的 特点: 压缩操作:选择文件和文件夹——>压缩文件 解压操作:选择文件——>解压文件 注意:bug很多 请不要联系本人 张波微信:zb983978082 ''' class zipys: ''' 方法: 界面布局 选取文件 压缩文件 解压文件 特点: 压缩操作:选择文件——>压缩文件 解压操作:选择文件——>解压文件 ''' def __init__(self): self.root = tkinter.Tk() self.root.minsize(490,400) self.root.title('波波版压缩软件') #声明label使用的变量 self.filenames = tkinter.StringVar() #self.val1 = tkinter.StringVar() self.layout() self.files = () self.root.mainloop() #选取文件 既可以选择要压缩的文件,又可以选择被解压的文件 最大特点是压缩和解压两个操作是独立分开的 def selectfiles(self): #使用文件对话框 选择的即将要压缩/解压的文件全部存入files 组成一个元组 选择一个文件也是一个元组 方便以后压缩/解压操作使用 self.files = tkinter.filedialog.askopenfilenames(title = '请选择压缩/解压的文件,压缩按住Ctrl可以多选') #打印选择的文件 看看他是什么类型 print(self.files,type(self.files)) #准备显示信息 #临时的路径容器 tmpfiles = [] strvar1 = self.filenames.get() tmpfiles.append(strvar1) #遍历元组 进行路径的截取和省略操作 for i in self.files: #判断路径字符个数是否超过指定的长度 if len(i) >= 40: i = i[:16] + '...' + i[-15:] #将处理之后的数据存入临时列表 tmpfiles.append(i) #将所有文件路径组成字符串 写入label filestr = ' '.join(tmpfiles) print(filestr,type(filestr)) #将文件路径组成的字符串写入面板中 self.filenames.set(filestr) #判断此刻面板中是否有文件 if self.filenames.get() == '': tkinter.messagebox.showinfo(title='操作结果', message='您没有选择文件') else: # 提示用户选取文件成功 按open后的提示信息对话框 tkinter.messagebox.showinfo(title='操作结果', message='选取文件成功:' + '在面板中') def selectdirs(self): #使用文件夹对话框 添加文件夹 获取的文件夹是一个字符串 self.dirs = tkinter.filedialog.askdirectory(title = '请选择一个文件夹') #print(self.dirs,type(self.dirs)) #获取原有面板中的内容(字符串) tmpfiles = [] strvar2 = self.filenames.get() tmpfiles.append(strvar2) # 将处理之后的数据存入临时列表 tmpfiles.append(self.dirs) # 将所有文件路径组成字符串 写入label filestr = ' '.join(tmpfiles) print(filestr, type(filestr)) # 将文件路径组成的字符串写入面板中 self.filenames.set(filestr) # 判断此刻面板中是否有文件 if self.filenames.get() == '': tkinter.messagebox.showinfo(title='操作结果', message='您没有选择文件') else: # 提示用户选取文件成功 按open后的提示信息对话框 tkinter.messagebox.showinfo(title='操作结果', message='选取文件夹成功:' + '在面板中') #压缩文件函数 ''' 以下压缩操作必须要在选择压缩文件之后执行,把压缩的操作分成了两个按钮 1.选择文件按钮 目的:选择要压缩的文件 2.压缩文件按钮 目的:选择压缩后的文件要存入的文件路径(这个文件要新建,还需要给他取一个漂亮的名字) 3.注意事项:要先选择文件,即点击选择文件按钮 4.特点:压缩和解压两个操作是独立分开的 ''' def zipfiles(self): try: #判断是否已选择文件 if self.filenames.get() == '': #弹出信息提示对话框 tkinter.messagebox.showwarning(title = '警告',message = '请添加要压缩的文件') else: #之前选的文件要保存到一个目录(文件夹) 这一步的目的就是为了选择一个要保存到的位置 filename = tkinter.filedialog.asksaveasfilename(title = '指定保存压缩文件的位置,并在下面取一个帅气的名字',filetypes = (('zip文件','*.zip'),('所有文件','*.*'))) #self.filename 保存的一个文件路径 现在里面没有任何的东西 要在下面的写入之后才会有文件 print(filename) #新建压缩文件 zp = zipfile.ZipFile(filename,'a') #添加文件到压缩文件(遍历操作) for onefile in self.files: #括号里面第一个是要写入的文件的路径,第二个是你给她的命名,这里选取的是文件的最后一部分 zp.write(onefile,os.path.basename(onefile)) #关闭压缩文件 zp.close() #提示用户压缩之后的压缩文件的路径 tkinter.messagebox.showinfo(title = '操作结果',message = '压缩成功:'+ filename) except: tkinter.messagebox.showinfo(title='提示', message='解压没有完成哦') #解压文件函数 ''' 以下解压操作必须要在选择压缩文件之后执行,把解压文件分成了两个按钮 1.选择文件按钮 目的:选择要解压的文件 2.解压文件按钮 目的:选择解压后的文件要存入的文件夹路径(这个文件夹要新建,还需要给他取一个漂亮的名字) 3.注意事项:在点击压缩文件按钮并压缩文件成功后不能立刻点击解压文件按钮,要先选择文件,即点击选择文件按钮 4.优点:能够在对话框里面自主选择解压的文件和解压文件的目标文件 5.缺点:不能在压缩文件后立即点击解压文件按钮 6.特点:压缩和解压两个操作是独立分开的 ''' def extractfiles(self): try: # 判断是否已选择文件 if self.filenames.get() == '': # 弹出信息提示对话框 tkinter.messagebox.showwarning(title='警告', message='请添加要解压的文件') else: #选择解压文件的目标路径 解压后的文件保存到一个文件夹中 这一步的目的就是选择这个文件夹 filename1 = tkinter.filedialog.asksaveasfilename(title = '指定保存解压后文件的位置,并在下面取一个漂亮的名字',filetypes = (('zip文件','*zip'),('所有文件','*.*'))) print(filename1) #遍历之前选择的压缩文件,虽然只有一个元素,但是他是一个元组 for j in self.files: #压缩文件是元组 要把它变成字符串 所以要遍历操作 #打开要解压的压缩文件 fp = zipfile.ZipFile(j,'r') #解压全部文件 括号里面写入的是解压到的目标文件夹路径 fp.extractall(filename1) #解压指定文件 括号里面第一个写入的是指定解压的文件名称,第二个写入的是解压到的目标文件夹路径 #fp.extract('calcultor.py',self.filename1) #关闭要解压的压缩文件 fp.close() #提示用户解压的文件的目标路径 tkinter.messagebox.showinfo(title='操作结果', message='解压成功到:' + filename1) except: tkinter.messagebox.showinfo(title='提示', message='解压没有完成哦') def clearfiles(self): #面板清空 self.filenames.set('') def presshelp(self): self.val1 = tkinter.StringVar() newwindows = tkinter.Toplevel(bg = 'white') newwindows.title('压缩软件说明') newwindows.minsize(500,550) # 打开文件 zp = open('./压缩软件说明.txt', 'r+') self.shuoming = zp.read() print(self.shuoming,type(self.shuoming)) self.val1.set(self.shuoming) label = tkinter.Label(newwindows,bg = 'white',textvariable = self.val1,font = ('黑体',10),anchor = 'nw',justify = 'left') label.place(x = 10,y = 10) #====================================== 界面布局 ================================================================ def layout(self): #====================================== 菜单 ===================================================================== #添加菜单组件 #创建总菜单 allmenu = tkinter.Menu(self.root) #添加子菜单(帮助H) helpmenu = tkinter.Menu(allmenu,tearoff = 0) allmenu.add_cascade(label = '帮助H',menu = helpmenu) #添加选项卡 helpmenu.add_command(label = '查看帮助',command = self.presshelp) #摆放菜单 self.root.config(menu = allmenu) #============================================= 按钮 ============================================================= #添加文件按钮 btn1 = tkinter.Button(self.root,text = '选择文件',command = self.selectfiles) btn1.place(x = 15,y = 20,width = 80,height = 40) #添加文件夹按钮 btn2 = tkinter.Button(self.root, text='选择文件夹', command=self.selectdirs) btn2.place(x=110, y=20, width=80, height=40) #压缩操作按钮 btn3 = tkinter.Button(self.root,text = '压缩文件',command = self.zipfiles) btn3.place(x = 205,y = 20,width = 80,height = 40) #解压操作按钮 btn4 = tkinter.Button(self.root,text = '解压文件',command = self.extractfiles) btn4.place(x = 300,y = 20,width = 80,height = 40) #清空操作按钮 btn5 = tkinter.Button(self.root, text='清空文件', command= self.clearfiles) btn5.place(x= 395, y=20, width=80, height=40) #============================================= 标签 ======================================================== #添加标签按钮 label = tkinter.Label(self.root,bg = 'white',textvariable = self.filenames,anchor = 'nw',justify = 'left') label.place(x = 15,y = 80,width = 460,height = 300) ys = zipys()