Open In App

Weather App in Python using Tkinter module

Last Updated : 23 Jan, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

In this article, we are going to discuss how to create a weather app using tkinter. The GUI app will tell us the current weather of a particular city along with temperature details along with other details. 

Modules required:

  • Tkinter: It is a built-in python library for making GUI using tkinter toolkit.
  • Requests: It is a library which helps in fetching the data with the help of URL. It can be installed using the below command:
pip install requests

Approach:

Firstly, we have to use a weather API for fetching the data from the Open Weather Map website by generating an API key, and then we need to create a configuration file to store the key. And finally using that configuration file in the python script.

Steps to generate an API key:

  • Login in the Open Weather Map
  • Go to the API section. Then in the Current Weather Data section click on the Api doc.
  • Now in the API Call section, we have the link of api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}
  • Click on the API key on the link it will direct to the page from where you can get the key. The generated key looks like this:

Steps to create the Configuration file:

  • Create a file named config.ini.
  • Write key name enclosed in closed brackets in it here [gfg].
  • Create a variable key(here key) and paste the key you copied as shown below:

Steps to create the Python script:

  • Import modules.

Python3




# import required modules
from configparser import ConfigParser
import requests
from tkinter import *
from tkinter import messagebox


  • We have to first make the body of the GUI with the help of tkinter.

Python3




# create object
app = Tk()
  
# add title
app.title("Weather App")
  
# adjust window size
app.geometry("300x300")
  
# add labels, buttons and text
city_text = StringVar()
city_entry = Entry(app, textvariable=city_text)
city_entry.pack()
  
Search_btn = Button(app, text="Search Weather",
                    width=12, command=search)
Search_btn.pack()
  
location_lbl = Label(app, text="Location"
                     font={'bold', 20})
location_lbl.pack()
  
temperature_label = Label(app, text="")
temperature_label.pack()
  
weather_l = Label(app, text="")
weather_l.pack()
  
app.mainloop()


  • Read the config.ini file and then load the key and URL in the program.

Python3




# extract key from the 
# configuration file
config_file = "config.ini"
config = ConfigParser()
config.read(config_file)
api_key = config['gfg']['api']


  • Make a getweather() function to get the weather of a particular location.

Python3




# explicit function to get
# weather details
def getweather(city):
    result = requests.get(url.format(city, api_key))
      
    if result:
        json = result.json()
        city = json['name']
        country = json['sys']
        temp_kelvin = json['main']['temp']
        temp_celsius = temp_kelvin-273.15
        weather1 = json['weather'][0]['main']
        final = [city, country, temp_kelvin, 
                 temp_celsius, weather1]
        return final
    else:
        print("NO Content Found")


  • Search function so that we can get the output weather details.

Python3




# explicit function to
# search city
def search():
    city = city_text.get()
    weather = getweather(city)
      
    if weather:
        location_lbl['text'] = '{} ,{}'.format(weather[0], weather[1])
        temperature_label['text'] = str(weather[3])+"   Degree Celsius"
        weather_l['text'] = weather[4]
          
    else:
        messagebox.showerror('Error', "Cannot find {}".format(city))


Below is the complete program:

Python3




# import required modules
from configparser import ConfigParser
import requests
from tkinter import *
from tkinter import messagebox
  
# extract key from the
# configuration file
config_file = "config.ini"
config = ConfigParser()
config.read(config_file)
api_key = config['gfg']['api']
  
  
# explicit function to get
# weather details
def getweather(city):
    result = requests.get(url.format(city, api_key))
      
    if result:
        json = result.json()
        city = json['name']
        country = json['sys']
        temp_kelvin = json['main']['temp']
        temp_celsius = temp_kelvin-273.15
        weather1 = json['weather'][0]['main']
        final = [city, country, temp_kelvin, 
                 temp_celsius, weather1]
        return final
    else:
        print("NO Content Found")
  
  
# explicit function to
# search city
def search():
    city = city_text.get()
    weather = getweather(city)
    if weather:
        location_lbl['text'] = '{} ,{}'.format(weather[0], weather[1])
        temperature_label['text'] = str(weather[3])+"   Degree Celsius"
        weather_l['text'] = weather[4]
    else:
        messagebox.showerror('Error', "Cannot find {}".format(city))
  
  
# Driver Code
# create object
app = Tk()
# add title
app.title("Weather App")
# adjust window size
app.geometry("300x300")
  
# add labels, buttons and text
city_text = StringVar()
city_entry = Entry(app, textvariable=city_text)
city_entry.pack()
Search_btn = Button(app, text="Search Weather"
                    width=12, command=search)
Search_btn.pack()
location_lbl = Label(app, text="Location", font={'bold', 20})
location_lbl.pack()
temperature_label = Label(app, text="")
temperature_label.pack()
weather_l = Label(app, text="")
weather_l.pack()
app.mainloop()


Output:



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads