Fletのメモ書き
controlsへ末尾に追加するならappend(hoge)
一番上に追加するならinsert(0,hoge)
一括で削除するならclear()
確かによく見ると配列だった
入力とか失敗した時にバナーとかテロップ的なものをぺろっと出したいなと思ったので
def open_banner(message):
page.snack_bar = ft.SnackBar(ft.Text(message,color=ft.colors.BLACK),open=True,bgcolor=ft.colors.WHITE70)
page.update()
page云々直下で。
本当は上に表示させたい
URLクリックしたらブラウザ開いてページが表示させたい。
ドキュメント何も書いてないなあ
カラムとカラムの間に下線引きたいなーと思ったら
ft.Divider()
という便利なものがあった
けどそもそもListViewを使えばそんな面倒なことはしなくて良いようだ
せっかくなのでパッケージングをしようと思ったら、うまくいかなかった。
Homebrew上のPythonにやってもらったら成功した
本家のものや元から入ってるPythonで実行すると失敗した
pyinstaller hoge.py
or
flet pack hoge.py
import flet as ft
def main(page: ft.Page):
page.title = "My Memo App"
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
display_text=ft.Text("Hello World")
page.add(display_text)
page.update()
ft.app(target=main)
めちゃくちゃシンプルなテスト用のアプリでは成功したが、
色々詰め込んだものはどの環境でも失敗した。
FileNotFoundError: [Errno 2] No such file or directory: 'commands'
[21856] Failed to execute script 'index' due to unhandled exception!
つまり別フォルダの中身が全部読み込んでもらえてなさそう
構成はこんな感じ
app.pyが本体
コマンドを分けたのが仇となった・・・
.
├── commands
│ ├── __init__.py
│ ├── c.py
│ ├── p.py
│ ├── scrap.py
│ └── test.py
├── history.log
├── Input.py
├── MakeMemo.py
├── MongoDB.py
└── app.py
こちらを参考に__init__.pyを書き換えたら成功した。
よく見たら成功していなかった。
エラーが出てなかったので油断した・・
基本的にimport hogeみたいに手動で指定してあげる分にはエラーは出ないことがわかった。
フォルダ内を一括でimportlibを使ってインポートしたりすると
Failed to execute script 'app' due to unhandled exception
であったり、No such file or directoryが表示されるようだ。
スクロールについて
view = ft.Column(width=600,spacing=10,expand=True,scroll=ft.ScrollMode.HIDDEN)
view2 = ft.Column(width=600,spacing=10,scroll=ft.ScrollMode.HIDDEN)
for i in range(10):
view.controls.append(ft.Text(i))
view2.controls.append(ft.Text(i))
page.add(view)
page.add(view2)
view2はexpand=Trueではないのでスクロールされない
class TestView(ft.UserControl):
def __init__(self):
super().__init__()
self.in_view = ft.Column(width=600,spacing=10,expand=True,scroll=ft.ScrollMode.HIDDEN)
def build(self):
return self.in_view
def main(page: ft.Page):
view = ft.Column(width=600,spacing=10,expand=True,scroll=ft.ScrollMode.HIDDEN)
view2 = TestView()
for i in range(10):
view.controls.append(ft.Text(i))
view2.in_view.controls.append(ft.Text(i))
page.add(view)
page.add(view2)
view2.update()
page.update()
view2はスクロールされない。
なぜかわからない・・。
なぜかview2はstack {}となっている。
クラスにすると何か扱いが変わるようだ。
class TestView(ft.UserControl):
def __init__(self):
super().__init__()
self.in_view = ft.Column()
def build(self):
return self.in_view
def main(page: ft.Page):
view = ft.Column(width=600,spacing=10,expand=True,scroll=ft.ScrollMode.HIDDEN)
view2_outer = ft.Column(width=600,spacing=10,expand=True,scroll=ft.ScrollMode.HIDDEN)
view2 = TestView()
view2_outer.controls.append(view2)
for i in range(10):
view.controls.append(ft.Text(i))
view2.in_view.controls.append(ft.Text(i))
page.add(view)
page.add(view2_outer)
page.update()
クラスを使いたい時、外側にカラムを一枚着せるとスクロールされる