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
- Create a new project folder and name it
simple_weather_forecast_app
simple_weather_forecast_app
. - Create a new file inside the folder and name it
simple_weather_forecast_app.py
simple_weather_forecast_app.py
. - Open the project folder in your favorite text editor or IDE.
- Copy the code below and paste it into the
simple_weather_forecast_app.py
simple_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
- Save the file.
- Install required dependencies:
pip install requests
pip install requests
- 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