Skip to content

Simple Weather Forecast App

Abstract

Build a Simple Weather Forecast App that fetches and displays weather forecast data from an API. The app provides a GUI for entering city names and viewing the forecast. This project demonstrates API integration and GUI development in Python.

Prerequisites

  • Python 3.6 or above
  • Text Editor or IDE
  • Basic understanding of Python syntax
  • Familiarity with Tkinter for GUI development
  • Knowledge of API requests

Getting Started

Creating a new project

  1. Create a new project folder and name it simple_weather_forecast_appsimple_weather_forecast_app.
  2. Create a new file inside the folder and name it simple_weather_forecast_app.pysimple_weather_forecast_app.py.
  3. Open the project folder in your favorite text editor or IDE.
  4. Copy the code below and paste it into the simple_weather_forecast_app.pysimple_weather_forecast_app.py file.

Write the code

⚙️ simple_weather_forecast_app.py
simple_weather_forecast_app.py
"""
Simple Weather Forecast App
 
A Python application that fetches and displays weather forecast data. Features include:
- Fetching weather data from an API.
- Displaying the forecast in a user-friendly format.
"""
 
import requests
from tkinter import Tk, Label, Entry, Button, messagebox
 
API_KEY = "your_openweathermap_api_key"
BASE_URL = "http://api.openweathermap.org/data/2.5/weather"
 
 
class WeatherForecastApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Simple Weather Forecast App")
 
        Label(root, text="Enter City Name:").grid(row=0, column=0, padx=10, pady=10)
        self.city_entry = Entry(root, width=30)
        self.city_entry.grid(row=0, column=1, padx=10, pady=10)
 
        Button(root, text="Get Weather", command=self.get_weather).grid(row=1, column=0, columnspan=2, pady=10)
 
        self.result_label = Label(root, text="", wraplength=400, justify="left")
        self.result_label.grid(row=2, column=0, columnspan=2, padx=10, pady=10)
 
    def get_weather(self):
        """Fetch weather data for the entered city."""
        city = self.city_entry.get()
        if not city:
            messagebox.showerror("Error", "Please enter a city name.")
            return
 
        params = {"q": city, "appid": API_KEY, "units": "metric"}
        try:
            response = requests.get(BASE_URL, params=params)
            data = response.json()
 
            if response.status_code == 200:
                weather = data["weather"][0]["description"].capitalize()
                temp = data["main"]["temp"]
                feels_like = data["main"]["feels_like"]
                humidity = data["main"]["humidity"]
 
                result = (
                    f"Weather in {city}:\n"
                    f"Condition: {weather}\n"
                    f"Temperature: {temp}°C\n"
                    f"Feels Like: {feels_like}°C\n"
                    f"Humidity: {humidity}%"
                )
                self.result_label.config(text=result)
            else:
                messagebox.showerror("Error", data.get("message", "Failed to fetch weather data."))
        except Exception as e:
            messagebox.showerror("Error", f"An error occurred: {e}")
 
 
def main():
    root = Tk()
    app = WeatherForecastApp(root)
    root.mainloop()
 
 
if __name__ == "__main__":
    main()
 
simple_weather_forecast_app.py
"""
Simple Weather Forecast App
 
A Python application that fetches and displays weather forecast data. Features include:
- Fetching weather data from an API.
- Displaying the forecast in a user-friendly format.
"""
 
import requests
from tkinter import Tk, Label, Entry, Button, messagebox
 
API_KEY = "your_openweathermap_api_key"
BASE_URL = "http://api.openweathermap.org/data/2.5/weather"
 
 
class WeatherForecastApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Simple Weather Forecast App")
 
        Label(root, text="Enter City Name:").grid(row=0, column=0, padx=10, pady=10)
        self.city_entry = Entry(root, width=30)
        self.city_entry.grid(row=0, column=1, padx=10, pady=10)
 
        Button(root, text="Get Weather", command=self.get_weather).grid(row=1, column=0, columnspan=2, pady=10)
 
        self.result_label = Label(root, text="", wraplength=400, justify="left")
        self.result_label.grid(row=2, column=0, columnspan=2, padx=10, pady=10)
 
    def get_weather(self):
        """Fetch weather data for the entered city."""
        city = self.city_entry.get()
        if not city:
            messagebox.showerror("Error", "Please enter a city name.")
            return
 
        params = {"q": city, "appid": API_KEY, "units": "metric"}
        try:
            response = requests.get(BASE_URL, params=params)
            data = response.json()
 
            if response.status_code == 200:
                weather = data["weather"][0]["description"].capitalize()
                temp = data["main"]["temp"]
                feels_like = data["main"]["feels_like"]
                humidity = data["main"]["humidity"]
 
                result = (
                    f"Weather in {city}:\n"
                    f"Condition: {weather}\n"
                    f"Temperature: {temp}°C\n"
                    f"Feels Like: {feels_like}°C\n"
                    f"Humidity: {humidity}%"
                )
                self.result_label.config(text=result)
            else:
                messagebox.showerror("Error", data.get("message", "Failed to fetch weather data."))
        except Exception as e:
            messagebox.showerror("Error", f"An error occurred: {e}")
 
 
def main():
    root = Tk()
    app = WeatherForecastApp(root)
    root.mainloop()
 
 
if __name__ == "__main__":
    main()
 

Key Features

  • Fetch weather data from an API
  • Display forecast in a user-friendly format
  • GUI interface for user interaction

Explanation

Fetching Weather Data

Weather data is fetched from the OpenWeatherMap API:

simple_weather_forecast_app.py
params = {"q": city, "appid": API_KEY, "units": "metric"}
response = requests.get(BASE_URL, params=params)
simple_weather_forecast_app.py
params = {"q": city, "appid": API_KEY, "units": "metric"}
response = requests.get(BASE_URL, params=params)

Displaying Results

Weather information is shown in a Tkinter Label widget:

simple_weather_forecast_app.py
self.result_label.config(text=f"Weather: {weather}\nTemperature: {temp}°C")
simple_weather_forecast_app.py
self.result_label.config(text=f"Weather: {weather}\nTemperature: {temp}°C")

Running the Application

  1. Save the file.
  2. Install required dependencies:
pip install requests
pip install requests
  1. Run the application:
python simple_weather_forecast_app.py
python simple_weather_forecast_app.py

Conclusion

This Simple Weather Forecast App project is a great way to learn about API integration and GUI development in Python. You can extend it by adding more detailed forecasts, weather maps, or historical data.

Was this page helpful?

Let us know how we did