Mon dernier projet à Flet nécessitait la mise en place de DatePicker. Regardons l'exemple fourni par la documentation officielle 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 documentation ne précise pas si les propriétés first_date et last_date sont mises à jour par défaut à chaque exécution de l'application. Supposons que l'on compile une application et que les paramètres first_date et last_date soient conservés comme dans le code précédent, cela pourrait-il générer des erreurs lors de la sélection de dates valides dans le futur ?
Mon application est destinée à gratter X (Twitter) entre deux dates précises. En cherchant à la rendre intuitive et facile à utiliser (en tant qu'application déjà compilée et exécutable), en examinant le code, je me suis demandé ce qui se passerait si les paramètres first_date et last_date maintenaient les valeurs attribué au moment de la rédaction de l'application. Si dans un an, quelqu'un voulait gratter jusqu'à hier, pourrait-il le faire ? Comment pourrait-on s'assurer que les paramètres sont dynamiques pour que le timing soit calculé à partir du moment de l'exécution ?
En cas de doute, je l'ai résolu de cette façon :
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 cette façon, nous garantissons que quel que soit le moment où l'application est exécutée (compilée ou non), les dates sélectionnables dans le calendrier auront un enregistrement temporel configurable en prenant l'exécution elle-même comme paramètre initial.
Cette approche est également utile pour implémenter des fonctionnalités spécifiques qui nécessitent des limitations sur les dates sélectionnables, comme autoriser uniquement la sélection à ce jour, car cela n'aurait aucun sens de choisir des dates dans le futur.
Par exemple, dans mon application de scraping, quel sens aurait-il d'autoriser des dates configurables dans le futur lorsque la tâche consiste à collecter des informations du passé ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!