Погода на Python с Flet: приложение с OpenWeatherMap

Данная статья описывает создание приложения для получения информации о погоде в разных городах с помощью библиотеки Python Flet и сервиса OpenWeatherMap. Приложение будет иметь интуитивно понятный интерфейс.

Подготовка проекта

Начнём с создания проекта. Импортируем библиотеку Flet, создадим функцию main и её вызов. Название проекта — «Погода», тема — «Dark», расположение элементов — вертикальное и горизонтальное центрирование. Создадим переменную для текстового поля (TextField) шириной 400 пикселей с подсказкой «Введите город».

import flet as ft
import requests

API_KEY = "YOUR_API_KEY" # Замените на ваш API ключ

def main(page: ft.Page):
    page.title = "Погода"
    page.theme_mode = ft.ThemeMode.DARK
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    page.horizontal_alignment = ft.MainAxisAlignment.CENTER

    city_field = ft.TextField(width=400, hint_text="Введите город")
    weather_data = ft.Text()

    def get_info(e):
        city = city_field.value
        if len(city) < 2:
            return

        url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric"
        try:
            response = requests.get(url).json()
            temp = str(response["main"]["temp"])
            weather_data.value = f"Погода: {temp}°C"
            page.update()
        except (requests.exceptions.RequestException, KeyError):
            weather_data.value = "Ошибка получения данных"
            page.update()


    def change_theme(e):
        page.theme_mode = ft.ThemeMode.LIGHT if page.theme_mode == ft.ThemeMode.DARK else ft.ThemeMode.DARK
        page.update()

    page.add(
        ft.Row(
            controls=[
                ft.IconButton(
                    icon=ft.icons.SUNNY,
                    on_click=change_theme,
                ),
                ft.Text("Погодная программа"),
            ],
            alignment=ft.MainAxisAlignment.CENTER,
        )
    )

    page.add(
        ft.Row(
            controls=[
                city_field,
                ft.ElevatedButton(text="Получить", on_click=get_info),
            ],
            alignment=ft.MainAxisAlignment.CENTER,
        )
    )
    page.add(weather_data)

ft.app(target=main)

Получение данных о погоде и обработка ошибок

Для получения данных используется API OpenWeatherMap. Необходимо зарегистрироваться на сайте OpenWeatherMap и получить API ключ, указав его в переменной API_KEY. Функция get_info формирует URL-запрос, обрабатывает ответ и выводит температуру. Обработка ошибок добавлена для повышения стабильности приложения. Библиотека requests должна быть установлена (pip install requests).

Интерфейс пользователя

Интерфейс состоит из строки с кнопкой смены темы и названием приложения, строки с полем ввода города и кнопкой «Получить», а также элемента для отображения температуры. Все элементы выровнены по центру.

Созданное приложение получает информацию о погоде, используя библиотеку Flet и API OpenWeatherMap. Интерфейс прост и интуитивно понятен, предусмотрена смена темы. Функциональность может быть расширена добавлением отображения дополнительной информации о погоде (влажность, ветер и т.д.).

Что будем искать? Например,программа