C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

Fletのテキストフィールドでのバリデーション2

こちらの続きです。
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で返す関数を引数で渡せば、それっぽくなるんじゃないかな?

日付と判断されるまで警告出続けるのは精神衛生上あまり良くないけど・・・。