【Flet】テキストフィールドに日付を表示する【Python】

2025年6月19日Flet,Python

テキストフィールドに日付を表示する


テキストフィールドに日付を表示する

日付の表示

概要

  • 日付範囲を指定するテキストフィールドを設定する
  • 以下の初期値を設定する
    • From:処理実行日
    • To:処理実行日 + 1日

日付の編集とチェック

概要

  • 入力された日付のチェックをする
    • 日付の形式が正しいか
    • From と To の指定が正しいか

補足

以下は型チェックエラー回避のための設定

  • 短絡評価で None の代わりにブランク文字列が入るように設定
    • from_text = date_from_field.value or ''
    • to_text = date_to_field.value or ''
import re
from datetime import datetime, timedelta

import flet as ft

def main(page: ft.Page) -> None:

    # 日付の YYYY/MM/DD 形式形式チェック
    def validate_date_format(date_text: str) -> bool:
        return bool(re.match(r'^\d{4}/\d{2}/\d{2}$', date_text))

    # 日付が編集されたら入力値のチェックを行う
    def on_text_change(e: ft.ControlEvent) -> None:
        from_text = date_from_field.value or ''
        to_text = date_to_field.value or ''

        if validate_date_format(from_text) and validate_date_format(to_text):
            try:
                from_date = datetime.strptime(from_text, '%Y/%m/%d')
                to_date = datetime.strptime(to_text, '%Y/%m/%d')
                button.disabled = from_date > to_date
            except ValueError:
                button.disabled = True
        else:
            button.disabled = True

        page.update()

    # 日付入力フィールドに初期日付を設定する
    today = datetime.now()
    tomorrow = today + timedelta(days=1)

    date_from_field = ft.TextField(
        value=today.strftime('%Y/%m/%d'),
        width=120,
        on_change=on_text_change,
        label='開始日'
    )
    date_to_field = ft.TextField(
        value=tomorrow.strftime('%Y/%m/%d'),
        width=120,
        on_change=on_text_change,
        label='終了日'
    )

    # 日付入力後の処理を想定したボタンを配置する
    button = ft.ElevatedButton(
        text='日付入力が正しいと活性化',
        disabled=True
    )

    # 画面サイズ
    page.window.width = 400
    page.window.height = 300
    # from to を並べて配置する
    date_fields = ft.Row([date_from_field, ft.Text('~'), date_to_field])

    page.add(date_fields, button)

# Fletアプリケーションを実行
ft.app(target=main)

初期状態では非活性

正しい日付入力をするとボタンが活性

日付が YYYY/MM/DD になっていないためボタンが非活性

Flet,Python

Posted by junichi