Requisitos previos: Encuentre el clima actual de cualquier ciudad usando la API de openweathermap
La idea de este artículo es proporcionar una aplicación GUI simple a los usuarios para obtener la temperatura actual de cualquier ciudad que deseen ver. El sistema también proporciona una interfaz de usuario simple para simplificar la aplicación. También proporciona una experiencia de usuario increíble para sus usuarios. Las características de esta aplicación serán que será una aplicación de pronóstico del tiempo en tiempo real que devuelve la temperatura actual, la temperatura máxima y mínima, la humedad, la latitud y las coordenadas de longitud de la ciudad buscada, la fecha y la hora actuales. También puede cambiar su tema según la hora del día.
API de mapa de tiempo abierto
openwethermapa
Módulos necesarios
- Tkinter: es estándar
- json: este módulo se usa para manejar archivos JSON y viene integrado con Python. Así que no hay necesidad de instalarlo externamente
- peticiones: Se utiliza para
pip install requests
Imágenes utilizadas en la siguiente aplicación:
A continuación se muestra la implementación.
Python3
# python3 -- Weather Application using API # importing the libraries from tkinter import * import requests import json import datetime from PIL import ImageTk, Image # necessary details root = Tk() root.title("Weather App") root.geometry("450x700") root['background'] = "white" # Image new = ImageTk.PhotoImage(Image.open('logo.png')) panel = Label(root, image=new) panel.place(x=0, y=520) # Dates dt = datetime.datetime.now() date = Label(root, text=dt.strftime('%A--'), bg='white', font=("bold", 15)) date.place(x=5, y=130) month = Label(root, text=dt.strftime('%m %B'), bg='white', font=("bold", 15)) month.place(x=100, y=130) # Time hour = Label(root, text=dt.strftime('%I : %M %p'), bg='white', font=("bold", 15)) hour.place(x=10, y=160) # Theme for the respective time the application is used if int((dt.strftime('%I'))) >= 8 & int((dt.strftime('%I'))) <= 5: img = ImageTk.PhotoImage(Image.open('moon.png')) panel = Label(root, image=img) panel.place(x=210, y=200) else: img = ImageTk.PhotoImage(Image.open('sun.png')) panel = Label(root, image=img) panel.place(x=210, y=200) # City Search city_name = StringVar() city_entry = Entry(root, textvariable=city_name, width=45) city_entry.grid(row=1, column=0, ipady=10, stick=W+E+N+S) def city_name(): # API Call api_request = requests.get("https://api.openweathermap.org/data/2.5/weather?q=" + city_entry.get() + "&units=metric&appid="+api_key) api = json.loads(api_request.content) # Temperatures y = api['main'] current_temprature = y['temp'] humidity = y['humidity'] tempmin = y['temp_min'] tempmax = y['temp_max'] # Coordinates x = api['coord'] longtitude = x['lon'] latitude = x['lat'] # Country z = api['sys'] country = z['country'] citi = api['name'] # Adding the received info into the screen lable_temp.configure(text=current_temprature) lable_humidity.configure(text=humidity) max_temp.configure(text=tempmax) min_temp.configure(text=tempmin) lable_lon.configure(text=longtitude) lable_lat.configure(text=latitude) lable_country.configure(text=country) lable_citi.configure(text=citi) # Search Bar and Button city_nameButton = Button(root, text="Search", command=city_name) city_nameButton.grid(row=1, column=1, padx=5, stick=W+E+N+S) # Country Names and Coordinates lable_citi = Label(root, text="...", width=0, bg='white', font=("bold", 15)) lable_citi.place(x=10, y=63) lable_country = Label(root, text="...", width=0, bg='white', font=("bold", 15)) lable_country.place(x=135, y=63) lable_lon = Label(root, text="...", width=0, bg='white', font=("Helvetica", 15)) lable_lon.place(x=25, y=95) lable_lat = Label(root, text="...", width=0, bg='white', font=("Helvetica", 15)) lable_lat.place(x=95, y=95) # Current Temperature lable_temp = Label(root, text="...", width=0, bg='white', font=("Helvetica", 110), fg='black') lable_temp.place(x=18, y=220) # Other temperature details humi = Label(root, text="Humidity: ", width=0, bg='white', font=("bold", 15)) humi.place(x=3, y=400) lable_humidity = Label(root, text="...", width=0, bg='white', font=("bold", 15)) lable_humidity.place(x=107, y=400) maxi = Label(root, text="Max. Temp.: ", width=0, bg='white', font=("bold", 15)) maxi.place(x=3, y=430) max_temp = Label(root, text="...", width=0, bg='white', font=("bold", 15)) max_temp.place(x=128, y=430) mini = Label(root, text="Min. Temp.: ", width=0, bg='white', font=("bold", 15)) mini.place(x=3, y=460) min_temp = Label(root, text="...", width=0, bg='white', font=("bold", 15)) min_temp.place(x=128, y=460) # Note note = Label(root, text="All temperatures in degree celsius", bg='white', font=("italic", 10)) note.place(x=95, y=495) root.mainloop()
Producción:
Publicación traducida automáticamente
Artículo escrito por shyampraveensingh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA