C#ATIA

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

FilePickerのデフォルトファイル名を動的に設定したい

こちらにあるサンプルは複数選択を行うFilePickerです。
FilePicker | Flet

データを保存する機能を付けたいので、ファイル保存ダイアログとして
変更しました。

# python using-flet
import flet as ft

def main(page: ft.Page):
    def save_file_result(e: ft.FilePickerResultEvent):
        if e.path:
            print(e.path)
        else:
            print("Cancel!!!")

    pick_files_dialog = ft.FilePicker(on_result = save_file_result)
    page.overlay.append(pick_files_dialog)

    page.add(
        ft.TextField(
            value = "piyo" 
        ),
        ft.ElevatedButton(
            "File Picker Test",
            icon = ft.icons.UPLOAD_FILE,
            on_click = lambda _: pick_files_dialog.save_file(
                file_name = "hoge"
            ),
        ),
    )

ft.app(target=main)

実行するとこんな画面です。

"piyo"部分はテキストフィールドで文字が入力出来ますが、
今は無関係です。

"File Picker Test"を押すと、”名前を付けて保存”ダイアログが表示されます。

OSのダイアログを呼び出してくれるようです。

ダイアログのファイル名の欄には"hoge"が入っていますが、
こちらの部分で設定しています。

                file_name = "hoge"

これを動的(と言うのかな?)に設定してダイアログを表示させたい
のですが、どうすれば良いのか分からず困っています。

目標は、隣のコントロールに記載されている"piyo"を表示させる事です。

・・・

本当は、お悩み相談+愚痴的なつもりだったのですが、書いているうちに
思い付き解決してしまいました。

    page.add(
        ft.TextField(
            value = "piyo" 
        ),
        ft.ElevatedButton(
            "File Picker Test",
            icon = ft.icons.UPLOAD_FILE,
            on_click = lambda e: pick_files_dialog.save_file(
                # file_name = "hoge"
                file_name = e.page._controls[0].value
            ),
        ),
    )

もう、本番のコードが超スパゲティになってる・・・。
リファルタリング結構しているんだけどなぁ