Rumah >pembangunan bahagian belakang >Tutorial Python >Mengendalikan DatePicker dalam Flet

Mengendalikan DatePicker dalam Flet

Patricia Arquette
Patricia Arquetteasal
2024-09-26 08:41:42355semak imbas

Manejo de DatePicker en Flet

Projek terakhir saya di Flet memerlukan pelaksanaan DatePicker. Mari lihat contoh yang disediakan oleh dokumentasi rasmi 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)

Dokumentasi tidak menjelaskan sama ada sifat first_date dan last_date dikemas kini secara lalai selepas setiap pelaksanaan aplikasi. Katakan kita menyusun apl dan parameter first_date dan last_date disimpan seperti dalam kod sebelumnya, bolehkah ini menjana ralat semasa memilih tarikh yang sah pada masa hadapan?

Apl saya bertujuan untuk mengikis X (Twitter) antara dua tarikh tertentu. Apabila ingin menjadikannya intuitif dan mudah digunakan (sebagai apl yang telah disusun dan boleh dilaksanakan), menyemak kod itu, saya bertanya kepada diri sendiri apa yang akan berlaku jika parameter first_date dan last_date mengekalkan nilai ditetapkan pada masa menulis apl. Jika dalam setahun, ada yang ingin mengikis sehingga semalam, bolehkah mereka melakukannya? Bagaimanakah kita boleh memastikan bahawa parameter adalah dinamik supaya masa dikira dari masa pelaksanaan?

Apabila ragu-ragu, saya menyelesaikannya dengan cara ini:

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)

Dengan cara ini, kami memastikan bahawa tidak kira saat di mana aplikasi itu dilaksanakan (disusun atau tidak), tarikh yang boleh dipilih dalam kalendar akan mempunyai rekod temporal boleh dikonfigurasikan dengan mengambil pelaksanaan itu sendiri sebagai parameter awal.

Pendekatan ini juga berguna untuk melaksanakan ciri khusus yang memerlukan pengehadan pada tarikh yang boleh dipilih, seperti hanya membenarkan pemilihan sehingga kini, kerana tidak masuk akal untuk memilih tarikh pada masa hadapan.

Sebagai contoh, dalam apl mengikis saya, apakah maksudnya untuk membenarkan tarikh boleh dikonfigurasikan pada masa hadapan apabila tugasnya adalah untuk mengumpul maklumat dari masa lalu?

Atas ialah kandungan terperinci Mengendalikan DatePicker dalam Flet. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn