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 app 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 app 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 app. 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 ejecute 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 necesiten 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 app de scraping, ¿qué sentido tendría permitir fechas configurables en el futuro cuando la tarea es recopilar información del pasado?
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3