"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Manejo de DatePicker en Flet

Manejo de DatePicker en Flet

Publicado el 2024-11-06
Navegar:949

Manejo de DatePicker en Flet

Mi último proyecto en Flet requería la implementación de DatePicker. Veamos el ejemplo que proporciona la documentación oficial de Flet.

import datetime
import flet as ft


def main(page: ft.Page):
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

    def handle_change(e):
        page.add(ft.Text(f"Date changed: {e.control.value.strftime('%Y-%m-%d')}"))

    def handle_dismissal(e):
        page.add(ft.Text(f"DatePicker dismissed"))

    page.add(
        ft.ElevatedButton(
            "Pick date",
            icon=ft.icons.CALENDAR_MONTH,
            on_click=lambda e: page.open(
                ft.DatePicker(
                    first_date=datetime.datetime(year=2023, month=10, day=1),
                    last_date=datetime.datetime(year=2024, month=10, day=1),
                    on_change=handle_change,
                    on_dismiss=handle_dismissal,
                )
            ),
        )
    )

ft.app(main)

La documentación no aclara si las propiedades first_date y last_date son ​​actualizadas por defecto ante cada ejecución de la aplicación. Asumamos que compilamos una aplicación y los parámetros de first_date y last_date se mantienen como en el código anterior, ¿esto podría generar errores al momento de seleccionar fechas válidas en el futuro?

Mi aplicación está destinada a realizar scraping en X (Twitter) entre dos fechas determinadas. Al buscar hacerla intuitiva y fácil de utilizar (como app ya compilada y ejecutable), revisando el código me preguntó qué sucedería si los parámetros first_date y last_date mantenían los valores adjudicados al momentos de escribir la aplicación. Si dentro de un año, alguien quisiera scrapear hasta ayer, ¿podría hacerlo? ¿Cómo podríamos asegurarnos de que los parámetros sean dinámicos para que la temporalidad se calcule a partir del momento de la ejecución?

Ante la duda, lo resolví de esta manera:

import datetime
import flet as ft

# Crear una variable para la fecha actual de la ejecución
today = datetime.datetime.now()

def main(page: ft.Page):
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

    def handle_change(e):
        page.add(ft.Text(f"Date changed: {e.control.value.strftime('%Y-%m-%d')}"))

    def handle_dismissal(e):
        page.add(ft.Text(f"DatePicker dismissed"))

    page.add(
        ft.ElevatedButton(
            "Pick date",
            icon=ft.icons.CALENDAR_MONTH,
            on_click=lambda e: page.open(
                ft.DatePicker(

                    # Configuramos las variables para que un calendario válido desde hace un año a hoy y durante un año a futuro
                    first_date=datetime.datetime(year=today.year - 1, month=today.month, day=today.day),
                    last_date=datetime.datetime(year=today.year   1, month=today.month, day=today.day),

                    on_change=handle_change,
                    on_dismiss=handle_dismissal,
                )
            ),
        )
    )

ft.app(main)

De este modo, nos aseguramos de que independientemente del momento en que se ejecuta la aplicación (compilada o no), las fechas seleccionables en el calendario tendrán un registro temporal configurable tomando como parámetro inicial la ejecución misma.

Este enfoque también resulta útil para implementar funcionalidades específicas que necesitan limitaciones para las fechas seleccionables, como permitir sólo seleccionar hasta el día de hoy, puesto que no tendría sentido elegir fechas a futuro.

Por ejemplo, en mi aplicación de scraping, ¿qué sentido tendría fechas configurables en el futuro cuando la tarea es recopilar información del pasado?

Declaración de liberación Este artículo se reproduce en: https://dev.to/matzalazar/manejo-de-datepicker-en-flet-1g1p?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3