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
を満たしたとき、スクロールできるようになります - 上記に伴って、ウィンドウサイズに合わせてユーザコントロール内
ListView
のheight
を調整したいときは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
で解決しました - すみません、当時参考にした記事あったのですが見つかりませんでした
- なぜこれで改善するのかはよく分かってません
-