【Flet】テキストフィールドに日付を表示する【Python】
2025年6月19日Flet,Python
テキストフィールドに日付を表示する
テキストフィールドに日付を表示する
日付の表示
概要
- 日付範囲を指定するテキストフィールドを設定する
- 以下の初期値を設定する
日付の編集とチェック
概要
- 入力された日付のチェックをする
- 日付の形式が正しいか
- 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 になっていないためボタンが非活性
