一、軟件描述
用Python tkinter模塊寫一款屬於自己的壓縮軟件。zip文件格式是通用的文檔壓縮標准,在ziplib模塊中,使用ZipFile來操作zip文件,具有功能:zip壓縮功能,zip解壓功能。(功能較少,比較low,大神勿噴。)
二、所需知識點
- 函數的運用
- 全局變量的運用
- tkinter模塊
- zip模塊
三、程序實現流程分析
- 用tkinter模塊創建一個壓縮軟件界面,主要用到界面功能,按鈕功能(打開軟件,壓縮文件,解壓文件),標簽(路徑顯示對話框)
- 定義三個函數,打開文件函數,壓縮文件函數,加壓文件函數。分別與‘打開文件’按鈕,‘壓縮文件’ 按鈕, ‘解壓文件’ 按鈕綁定
- 給函數中添加功能
四、代碼如下
1 import tkinter 2 import tkinter.filedialog 3 import os 4 import zipfile 5 import tkinter.messagebox 6 7 #創建住窗口 8 root = tkinter.Tk() 9 root.minsize(700,500) 10 root.title('李蛟龍的壓縮軟件') 11 root['bg'] = '#303030' 12 13 14 15 16 #聲明一個全局變量files 17 files = () 18 #聲明lable的使用變量 19 filenames = tkinter.StringVar() 20 #1.選取文件操作 21 def selecfiles(): 22 #聲明全局變量 23 global files 24 #使用文件對話框選擇文件 25 files = tkinter.filedialog.askopenfilenames(title = '選擇你要要做的軟件bitch') 26 #顯示選中文件的信息 27 #臨時的路徑容器 28 tmpfiles = [] 29 for i in files: 30 if len(i) > 60: 31 i = i[0:20] + '...' + i[-15:] 32 tmpfiles.append(i) 33 filestr = '\n'.join(tmpfiles) 34 print(filestr) 35 filenames.set(filestr) #在標簽中顯示文件名稱 36 37 38 39 40 #2.壓縮文件函數 41 def zipfiles(): 42 global files 43 #獲取壓縮文件的路徑 44 filename = tkinter.filedialog.asksaveasfilename(title = '保存文件',filetypes = (('zip 文件','*.zip'),('所有文件','*.*'))) 45 #新建壓縮文件 46 zp = zipfile.ZipFile(filename +'.zip','a') #壓縮文件默認zip格式 47 #添加要壓縮的文件(遍歷操作 48 for onefiles in files: 49 zp.write(onefiles,os.path.basename(onefiles)) 50 zp.close()#創建完成 51 #提示用戶壓縮路徑 52 tkinter.messagebox.showinfo(title = '操作結果',message = '壓縮成功:' + filename) 53 54 55 56 57 #3.解壓操作函數 58 def uncompress(): 59 global files 60 61 # 使用文件對話框選擇文件 62 files = tkinter.filedialog.askopenfilenames(title='選擇你要要做的軟件bitch') 63 # 顯示選中文件的信息 64 # 臨時的路徑容器 65 tmpfiles = [] 66 for i in files: 67 if len(i) > 60: 68 i = i[0:20] + '...' + i[-15:] 69 tmpfiles.append(i) 70 filestr = '\n'.join(tmpfiles) 71 print(filestr) 72 filenames.set(filestr) 73 74 75 zp = zipfile.ZipFile(filestr, 'r') 76 # 添加要壓縮的文件(遍歷操作 77 #for onefiles in files: 78 files1 = tkinter.filedialog.askdirectory(title = '選擇您要解壓的路徑') 79 zp.extractall(files1) 80 zp.close() # 解壓完成 81 #提示用戶壓縮路徑 82 tkinter.messagebox.showinfo(title = '操作結果',message = '解壓成功:'+ files1) 83 84 85 86 87 88 89 90 91 #界面布局 92 #菜單欄 93 allmenu = tkinter.Menu(root,bg = 'black') 94 95 filmenu = tkinter.Menu(allmenu,tearoff = 0) 96 filmenu.add_command(label = '打開') 97 filmenu.add_command(label = '保存') 98 filmenu.add_separator() 99 filmenu.add_command(label = '設置') 100 filmenu.add_command(label = '退出') 101 102 filmenu1 = tkinter.Menu(allmenu,tearoff = 0) 103 filmenu1.add_command(label = '打開') 104 filmenu1.add_command(label = '保存') 105 filmenu1.add_separator() 106 filmenu1.add_command(label = '設置') 107 filmenu1.add_command(label = '退出') 108 109 110 111 allmenu.add_cascade(label = '文件',menu = filmenu) 112 allmenu.add_cascade(label = '編輯',menu = filmenu1) 113 allmenu.add_cascade(label = '工具') 114 115 root.config(menu = allmenu,bg = 'black') 116 117 118 #添加按鈕界面 119 label = tkinter.Label(root,bg = '#242424') 120 label.place(width = 700,height = 115) 121 #1.添加文件按鈕 122 btnadd = tkinter.Button(root,text = '選擇文件',bg = '#242424',bd = 0.5,fg = 'grey',command = selecfiles) 123 btnadd.place(x = 100,y = 70,width = '80',height = 30) 124 #2.壓縮操作按鈕 125 btnadd = tkinter.Button(root,text = '壓縮文件',bg = '#242424',bd = 0.5,fg = 'grey',command = zipfiles) 126 btnadd.place(x = 300,y = 70,width = '80',height = 30) 127 #3.解壓操作按鈕 128 btnadd = tkinter.Button(root,text = '解壓文件',bg = '#242424',bd = 0.5,fg = 'grey',command = uncompress) 129 btnadd.place(x = 500,y = 70,width = '80',height = 30) 130 131 img1 = tkinter.PhotoImage(file = '1.gif') 132 labelg1 = tkinter.Label(root,image = img1) 133 labelg1.place(x = 115,y =15,width = 50,height = 50) 134 135 img2 = tkinter.PhotoImage(file = '2.gif') 136 labelg2 = tkinter.Label(root,image = img2) 137 labelg2.place(x = 317,y =15,width = 50,height = 50) 138 139 img3 = tkinter.PhotoImage(file = '1.gif') 140 labelg3 = tkinter.Label(root,image = img1) 141 labelg3.place(x = 515,y =15,width = 50,height = 50) 142 143 144 #4顯示信息的組件 145 label = tkinter.Label(root,bg = '#F2F2F2',textvariable = filenames,anchor = 'nw',justify = 'left') 146 label.place(x= 5,y = 115,width = '690',height = '370') 147 148 149 root.mainloop()
五、完成效果圖