こちらの続きです。
Fletのテキストフィールドでのバリデーション1 - C#ATIA
こんな感じっぽいです。
#python import flet as ft from datetime import datetime class ValidateTextField(ft.UserControl): ''' バリデーション付きテキストフィールド ''' def on_change_handler(self, e: ft.ControlEvent): if not self.is_validate(e.control.value): e.control.error_text = '入力値が相応しくありません' e.control.error_style = ft.TextStyle( color = ft.colors.RED ) else: e.control.error_text = '' e.control.update() def __init__(self, validateFanc): super().__init__() self.tf = ft.TextField( value = "", expand = True, on_change = self.on_change_handler ) self.is_validate = validateFanc def build(self): return self.tf def is_date(txt: str) -> bool: try: datetime.strptime(txt, "%Y-%m-%d") return True except: return False def main(page: ft.Page): set_page(page) page.add( ValidateTextField(is_date) ) def set_page(page: ft.Page): ''' 画面全体の初期設定 ''' page.title = "test" page.theme_mode = ft.ThemeMode.DARK page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.window_width = 300 page.window_height = 200 page.window_left = 100 page.window_top = 400 page.update() if __name__ == '__main__': ''' エントリーポイント ''' ft.app(target = main) # ft.app(target=main, view=ft.WEB_BROWSER)
Boolで返す関数を引数で渡せば、それっぽくなるんじゃないかな?
日付と判断されるまで警告出続けるのは精神衛生上あまり良くないけど・・・。