2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめての記事投稿

Fletを初めて使って躓いたことなど

Last updated at Posted at 2023-07-03

Fletとは

  • Pythonでマルチプラットフォームアプリが作れる言語
  • Mobileアプリをビルドできるようにするのはあくまで予定らしい
    • 楽しみ

概要

  • Fletを初めて使って、分かったこと、躓いたことなどを書きます
  • Fletのソースコードを読んだりはしていなくて、使いながら分かったことを書きます

1. 導入のしかた

  • pip install fletをします
  • 使用するpythonファイルでimport flet
  • 以上!

2. update()によるControl更新時の注意

  • Controlオブジェクトの属性(attribute)を、直接更新してからupdate()する必要があります
  • 誤り
    value = "before"
    txt = ft.Text(value)
    
    value = "after"
    txt.update()
    
    # 表示されるのは before
    
  • 解決
    txt = ft.Text("before")
    
    txt.value = "after"
    txt.update()
    
    # 表示されるのは after
    

3. update()が検知しない部分の更新を反映したい

  • 呼び出し元の方で一旦消して、再描画しましょう
  • controlsはリストと同様にclear(), append(), pop()などが使えます
  • もっといいやり方あったら教えてください
    class Example(ft.UserControl):
        def __init__(self):
            super().__init__()  
            self.value = "before"
    
        def build(self):
            self.btn = ft.FilledButton(text=self.value, on_click=self.handle_click)
            
            return ft.Column([self.btn])
    
        def handle_click(self, e):
            # 値の切り替え
            self.value = "after" if self.value == "before" else "before"
            self.controls.clear()
            self.btn = ft.FilledButton(text=self.value, on_click=self.handle_click)
            self.controls.append(self.btn)
            self.update()
    

4. ViewListのスクロールができない問題

  • ViewListは、引数heightを持たせないとスクロールできません
  • height > 各要素の総heightを満たしたとき、スクロールできるようになります
  • 上記に伴って、ウィンドウサイズに合わせてユーザコントロール内ListViewheightを調整したいときは pageオブジェクトで以下のように記述し、逐一再描画させるのが良いでしょう
    class App(ft.UserControl):
        def __init__(self, page_height):
            super().__init__()
            self.page_height = page_height
    
        def build(self):
            return ft.ListView(controls=[ft.Text("Example")], height=self.page_height)
    
    def main(page: ft.Page):
        def page_resize(e):
            page.controls.clear()
            app = App(page.window_height)
            page.add(app)
            app.update()
        # ウィンドウズサイズ変更時に発火する関数
        page.on_resize = page_resize
    
        page.add(App(page.window_height))
    
    ft.app(target=main)
    

6. ビルド時に起こったエラー

  • FletとPyinstallerのバージョンによるもの
    • 私の環境ではPyinstallerが古かったのが問題でした
    • どちらも最新版にすることで解決しました
  • chardetライブラリの有無
    • pip install chardetで解決しました
    • すみません、当時参考にした記事あったのですが見つかりませんでした
    • なぜこれで改善するのかはよく分かってません
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?