Closed16

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云々直下で。
本当は上に表示させたい

https://flet.dev/docs/controls/snackbar

ななねななね

URLクリックしたらブラウザ開いてページが表示させたい。
ドキュメント何も書いてないなあ

ななねななね

Pythonなのでwebbrowser使えば良いだけだった・・・

import webbrowser

ft.TextButton(self.title, on_click=self.button_clicked)

def button_clicked(self,e):
    webbrowser.open(self.url)
ななねななね

そういれば、これは
page.launch_url(url)
でもいけるということが後で判明した

ななねななね

カラムとカラムの間に下線引きたいなーと思ったら
ft.Divider()という便利なものがあった

けどそもそもListViewを使えばそんな面倒なことはしなくて良いようだ

ななねななね

せっかくなのでパッケージングをしようと思ったら、うまくいかなかった。
Homebrew上のPythonにやってもらったら成功した

ななねななね

本家のものや元から入ってるPythonで実行すると失敗した

ななねななね
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
ななねななね

よく見たら成功していなかった。
エラーが出てなかったので油断した・・

ななねななね

基本的に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()

クラスを使いたい時、外側にカラムを一枚着せるとスクロールされる

このスクラップは2023/11/16にクローズされました