Python GUI程式設計之tkinter入門案例--簡單的自動檔案下載器
阿新 • • 發佈:2018-12-13
利用Python3.6開發了一個簡易版的檔案批量下載軟體demo,使用的GUI工具是tkinter。預設開啟桌面的資料夾,可以實現自動讀取文字檔案中的檔案超連結,實現自動下載到桌面。 最近在整理自己磁碟檔案時,發現很多下載的檔案,如果只保留一個下載的超連結,這樣就可以把超連結放在一個txt文字檔案中,需要用到的時候,如果有一個軟體能自動讀取,自動下載其中的連結檔案,想想多方便,減少了磁碟的儲存空間。 下面是簡單的介面: 程式碼如下:
# encoding:utf-8 import os from tkinter import * from tkinter import filedialog import urllib.request class FileDownload: def __init__(self, master): self.filename=StringVar() self.filename.set('選擇要開啟的檔案資訊') self.src_dir='' self.urls=[] # tkinter剛開始不熟悉,佈局麻煩,這裡使用的網格佈局,row,column 的index,定位cell open_btn=Button(master, text="開啟檔案",width=15,height=3,borderwidth=2, command=self.openfile) download_btn=Button(master, text="開始下載",width=15,height=3,borderwidth=2, command=self.download) open_btn.grid(row=0,column=0,ipadx=5,ipady=3,padx=10,pady=3) download_btn.grid(row=1,column=0,ipadx=5,ipady=3,padx=10,pady=3) self.file_label=Label(master,textvariable=self.filename,wraplength=250,fg='green',bg='white',) self.file_label.grid(row=0,column=1,rowspan=2,ipadx=200,ipady=15,padx=10,pady=2)#,padx=20,pady=10, self.text=Text(master,width=100,height=50,bg='grey',fg='blue') self.text.grid(row=2,columnspan=2,ipadx=10,ipady=10) def openfile(self): # 系統預設開啟使用者的桌面檔案 default_dir=os.path.join(os.path.expanduser("~"), 'Desktop') fname = filedialog.askopenfilename(title='選擇開啟的檔案', filetypes=[('txt文字','*.txt'), ('All Files', '*')], initialdir=(os.path.expanduser(default_dir))) print('開啟的檔案',fname) self.src_dir=fname[0:fname.rindex('/')] self.filename.set(fname) self.urls=self.read_urls(fname) # 讀取urls def read_urls(self,fname): urls=[] with open(fname) as f: urls=f.readlines() urls=[url.replace('\n','') for url in urls] for i in urls: print(i) return urls def print_schedule(self,a,b,c): ''' 列印進度條資訊 a:已經下載的資料塊 b:資料塊的大小 c:遠端檔案的大小 ''' per = 100.0 * a * b / c if per > 100 : per = 100 print('下載進度%.1f%%' % per) def download(self): i=1 urls_nums=len(self.urls) for url in self.urls: print('正在下載:%s'%url) # 在介面上顯示下載的日誌資訊 self.text.insert(END,'正在下載%d/%d:%s\n'%(i,urls_nums,url)) self.text.see(END) self.text.update()# 這個很關鍵,更新頁面text資訊 filename = url.split('/')[-1] # 檔案明太長,或者含有'=,%,&'這些非法字元windows無法識別,會報錯, # 這裡簡單的截取了url的後20個字元作為名字 if len(filename)>20: filename=filename[-20:] local = os.path.join(self.src_dir,filename) urllib.request.urlretrieve(url,local,self.print_schedule) i+=1 self.text.insert(END,'下載結束') self.text.see(END) self.text.update() if __name__=='__main__': tker = Tk() tker.title("自動檔案下載器") tker.columnconfigure(0, weight=3) tker.columnconfigure(1, weight=7) tker.rowconfigure(0, weight=1) tker.rowconfigure(1, weight=1) tker.rowconfigure(2, weight=8) tker.geometry('640x480') # 設定主視窗的初始大小640x480 app = FileDownload(tker) tker.mainloop()
執行的過程如圖所示: 有興趣的可以不斷地完善下去,做成一個下載器 寫好程式碼以後,在用pyinstaller將程式碼打包成一個exe檔案(簡單的軟體隨處可以使用的) Python3.6打包py檔案成exe檔案的方式如下:
- 首先安裝pyinstaller這個外掛:
pip install pyinstaller
- 在cmd命令列中將當前工作目錄切換至要打包的py檔案的目錄下:例如你的py檔案存放在桌面的test資料夾中:
cd desktop/test
- 使用pyinstaller的命令開始打包,–icon用於指定可執行檔案的圖示,和py檔案存放在同一個資料夾下,-F表示只生成一個exe檔案,-w表示不使用windows的控制檯,直接開啟就是GUI介面
pyinstaller --icon=my.ico -F -w download.py
如果不需要指定icon圖示,可以如下這樣:
pyinstaller -F -w download.py
最後成功生成了一個與py檔案同名的exe檔案,該exe可執行檔案存放在與py檔案同級的dist資料夾中。 這樣就可以把exe可執行程式放在任意地方執行ok,大功告成!!!