C#ATIA

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

FletAppで終了時のイベントを取得したい1

この辺りを見たり
Introduction | Flet
こちらのIssuesを見たりしているのですが、
Issues · flet-dev/flet · GitHub
見つからずに困っています。(見落としの可能性あり)

テスト用にこの様なものを作りました。
(Fusion360APIと違い、素のpythonは実行するファイルの
切り替えが出来て楽ですね)

#python
import flet as ft

def main(page: ft.Page):

    set_page(page)
    page.add(
        ft.ElevatedButton(
            text='押すと終了',
            on_click=lambda e: page.window_destroy()
        )
    )


def set_page(page: ft.Page):
    '''
    画面全体の初期設定
    '''
    def window_event(e):
        # ウィンドウ操作に対してのイベント
        # webでは発生しないみたい
        print(e.data)

    def on_disconnect( _: ft.ControlEvent):
        # これはweb
        print("Hello from on_disconnect")

    def on_connect( _: ft.ControlEvent):
        # これはweb
        print("Hello from on_connect")

    def on_close( _: ft.ControlEvent):
        # これは 分からない
        print("Hello from on_close")

    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.window_prevent_close = True
    page.on_window_event = window_event
    page.on_disconnect = on_disconnect
    page.on_connect = on_connect
    page.on_close = on_close

    page.update()


if __name__ == '__main__':
    '''
    エントリーポイント
    '''
    ft.app(target = main)
    # ft.app(target=main, view=ft.WEB_BROWSER)

デスクトップアプリとして起動します。


こんな感じです。終了ボタンしかないです・・・。

ダイアログを動かしたり、サイズを変えたり、フォーカス失ったり
取得したり・・・すると、VSCodeのターミナルにチョロチョロ文字を
出力しています。欲しいのは "close"。


右上のXをクリックしても、 "close" は出ません。

    page.window_prevent_close = True #ここ
    page.on_window_event = window_event
    page.on_disconnect = on_disconnect
    page.on_connect = on_connect
    page.on_close = on_close

"page.window_prevent_close"をTrueにして、先程のXをクリックすると
"close" が出力されます。 が、アプリが終了しません。
"window_prevent_close"はそのような意味ですね・・・。

'押すと終了' ボタンをクリックします。
アプリは終了しますが、 "close" が出力されません・・・。

page.on_disconnectイベントを期待したのですが、こちらは
webアプリ終了時しかイベントが発生しませんでした。


終了時のイベントを取得したい理由は、次回の起動時の設定に
使う為(ウィンドウサイズや位置やその他モロモロ)情報を
取得して保存したいからです。
起動する度に、ウィンドウサイズを直したり、同じことを入力
したりするアプリやソフトってムカつきませんか?

終了時のイベント取得出来ないかな・・・。