Create a GUI downloader App using Python
In this Python tutorial, we will build a downloader App in Python (GUI based). This is a simple project using Tkinter.
File Downloader is an essential application that every operating system, Internet browsers, and even a customized standalone systems also consist of one. Having a downloader application helps us to manage the downloading process very easily and fastly with pretty much less chance of failure.
So In this tutorial, we are going to learn how to create a GUI application for downloading files using Python. Here we are going to use two libraries of Python Programming Language, these are:
- Tkinter – This library provides us the power of creating a seamless, nice looking and easy to use GUI applications and this is one of the best library present in Python Programming Language for GUI development.
- Requests – This module is used for processing our request based on URLs and depending upon the response is provided which consists of several parts like Header, Payload, etc. These responses can be analyzed and different types of information can be drawn from it, regarding the file we are fond of, like its Content, JSON, MIME type, Status Code, etc.
In this tutorial, I’m going to download an Image file from a random website, let’s see how the code begins, I would recommend you two first go through the Code it is pretty much easy to understand.
GUI Downloader Application using Tkinter in Python
Before getting started with the actual code first we need to install required libraries and modules
Installation:
$ sudo apt-get install python3-tk $ pip3 install requests
Now, we go with our actual code
Source Code:
# Importing Required Module
from tkinter import *
import requests
# Defining Downloder Class
class Downloader:
# Defining Constructor
def __init__(self,root):
self.root = root
# Title of the window
self.root.title("Downloader Application")
# Window Geometry
self.root.geometry("600x100+200+200")
# Declaring Url Variable
self.url = StringVar()
# Declaring Status Variable
self.status = StringVar()
# Initialising Status Variable
self.status.set("--/--")
# Creating Frame for downloader
download_frame = Frame(self.root,background="grey",width=600,height=100).place(x=0,y=0)
# Adding text widget lable for url
url_lbl = Label(download_frame,text="URL",compound=LEFT,font=("times new roman",15,"bold"),bg="grey",fg="gold").grid(row=1,column=0,padx=10,pady=10)
# Adding text widget for url
url_txt = Entry(download_frame,bd=2,width=25,textvariable=self.url,relief=SUNKEN,font=("times new roman",15)).grid(row=1,column=1,padx=10,pady=10)
# Adding the Download button
dwn_btn = Button(download_frame,text="Download",command=self.download,width=10,font=("times new roman",14,"bold"),bg="gold",fg="navyblue").grid(row=1,column=2,padx=10,pady=10)
# Adding the Status Label
status_lbl = Label(download_frame,textvariable=self.status,font=("times new roman",14,"bold"),bg="grey",fg="white").grid(row=2,column=1)
# Defining Download Function
def download(self):
# Cheaking if URL Entry is not Null
if self.url.get()=="":
self.status.set("URL NOT SPECIFIED")
else:
try:
# Updating Status
self.status.set("Downloading...")
self.root.update()
# Getting the response of request
Request = requests.get(self.url.get())
# Cheaking if status code is not bad
if Request.status_code == requests.codes.ok:
# Opening File to write bytes
file = open("download","wb")
file.write(Request.content)
file.close()
# Updating Status
self.status.set("Download Completed")
else:
self.status.set(Request.status_code)
except:
self.status.set("Error in Downloading")
# Creating TK Container
root = Tk()
# Passing Root to Downloader Class
Downloader(root)
# Root Window Looping
root.mainloop()Output:
Directory Before:

Running Program:

Input URL and Pressed Download Button:

File has been successfully downloaded:

Directory Afterwards:

Preview of Downloaded file:

To learn more about theĀ Tkinter andĀ Requests module of Python you can refer to their documentation. So, I hope this tutorial was fruitful to you. Thank you, ‘Keep Learning Keep Coding’.
Leave a Reply