Pythonだけで比較的省労力でGUIが作れて趣味プログラマレベルでもとっつきやすいFletについて語りませんか。
公式 https://flet.dev/
探検
【GUI】Fletスレ【Python/Flutter】
2025/01/25(土) 11:24:10.96ID:im0hq6D4
2025/09/01(月) 15:53:48.33ID:5rr2TLhQ
ControlBuilderの仕様って、こんな感じ?
・ 画面にはControlBuilderの第2引数builderの呼び出しによって生成されたコントロールが表示されるが、コントロールツリーにはControlBuilderオブジェクトそのものが格納される。
・ ControlBuilderの第2引数builderの呼び出しによって生成されたコントロールは、いったん画面に表示された後は(?)、ControlBuilderオブジェクトの属性contentに保持されている(そうなる前のcontent属性の値はNone)。生成されたコントロールの属性にアクセスしたいときは、このcontent属性経由でアクセスすることが考えられる。
・ ControlBuilderの第1引数state(その実引数式)は、ControlBuilderの呼び出し時にただ1度だけ評価され、ControlBuilderは以下その値を参照し続ける。したがって、コントロールの仕様がstate.attrに依存する場合は、第1引数としてはstateを渡し、第2引数builderの式の中でstate.attrを参照する形にするのが基本。第1引数にstate.attrを直接渡す形にしてしまうと(それ自身が値の変更を行うメソッドを持っていたり、そもそも値の変更を行う必要がないような場合はともかく)どこかでstate.attr = new_val としてもControlBuilder から状態変更として認識されない。
・ 描画更新・再描画は、第1引数stateの内容変更(おそらくそのハッシュ値の変更?)があったときに、第2引数builderに第1引数stateを引数として与えて呼び出したその戻り値のコントロールを新しいコントロールとする形で行われる。builderは描画更新・再描画のたびに呼び出されるが、ControlBuilderやその第1引数stateは描画更新・再描画のたびに評価されるわけではない。
・ 第1引数stateの内容変更は描画更新・再描画のトリガーになるので、stateオブジェクトはできるだけコンパクトにするのが良い。
・ ControlBuilderで生成されるコントロールにref属性を設定するのは、第2引数builderに渡される状態引数(=第1引数stateの値)が p → q → p …… というように同じ値になる場合(CheckBoxやRadioGroupでよくある)、同じ値による2回目以降の呼び出しでは効かなくなるという問題があるっぽい(キャッシュが働くため、refを設定するコードがスキップされてしまうのだと思われる)。事実上、Refが使えないのだとすると非常に不便なので何か回避法がありそうではあるが……。
・ 画面にはControlBuilderの第2引数builderの呼び出しによって生成されたコントロールが表示されるが、コントロールツリーにはControlBuilderオブジェクトそのものが格納される。
・ ControlBuilderの第2引数builderの呼び出しによって生成されたコントロールは、いったん画面に表示された後は(?)、ControlBuilderオブジェクトの属性contentに保持されている(そうなる前のcontent属性の値はNone)。生成されたコントロールの属性にアクセスしたいときは、このcontent属性経由でアクセスすることが考えられる。
・ ControlBuilderの第1引数state(その実引数式)は、ControlBuilderの呼び出し時にただ1度だけ評価され、ControlBuilderは以下その値を参照し続ける。したがって、コントロールの仕様がstate.attrに依存する場合は、第1引数としてはstateを渡し、第2引数builderの式の中でstate.attrを参照する形にするのが基本。第1引数にstate.attrを直接渡す形にしてしまうと(それ自身が値の変更を行うメソッドを持っていたり、そもそも値の変更を行う必要がないような場合はともかく)どこかでstate.attr = new_val としてもControlBuilder から状態変更として認識されない。
・ 描画更新・再描画は、第1引数stateの内容変更(おそらくそのハッシュ値の変更?)があったときに、第2引数builderに第1引数stateを引数として与えて呼び出したその戻り値のコントロールを新しいコントロールとする形で行われる。builderは描画更新・再描画のたびに呼び出されるが、ControlBuilderやその第1引数stateは描画更新・再描画のたびに評価されるわけではない。
・ 第1引数stateの内容変更は描画更新・再描画のトリガーになるので、stateオブジェクトはできるだけコンパクトにするのが良い。
・ ControlBuilderで生成されるコントロールにref属性を設定するのは、第2引数builderに渡される状態引数(=第1引数stateの値)が p → q → p …… というように同じ値になる場合(CheckBoxやRadioGroupでよくある)、同じ値による2回目以降の呼び出しでは効かなくなるという問題があるっぽい(キャッシュが働くため、refを設定するコードがスキップされてしまうのだと思われる)。事実上、Refが使えないのだとすると非常に不便なので何か回避法がありそうではあるが……。
2025/09/07(日) 12:43:28.89ID:TqDkjIbM
あれ、現時点でインストールするとControlBuilderが見つからないってなるな。>>39-41と同じ状態?
2025/09/07(日) 14:09:29.85ID:TqDkjIbM
StateViewという名前になったのか。こういう変更ってどこかに書いてあったのかな? アルファ版だから、どこにも書いてなかったとしても文句は言えないが。
2025/09/07(日) 23:17:20.34ID:TC5o/1J8
>>48
4点目だけど、描画更新・再描画が行われるのは、第1引数stateの内容変更があったときではなく、第1引数stateの子孫属性に対する代入があったときというのが正確みたいね(元と同じ値を代入したときも描画更新・再描画は行われるみたい)。noteで解説記事を書いている人によると、__set_attr__をフックしているらしい。
4点目だけど、描画更新・再描画が行われるのは、第1引数stateの内容変更があったときではなく、第1引数stateの子孫属性に対する代入があったときというのが正確みたいね(元と同じ値を代入したときも描画更新・再描画は行われるみたい)。noteで解説記事を書いている人によると、__set_attr__をフックしているらしい。
52デフォルトの名無しさん
2025/09/07(日) 23:55:55.13ID:wN29kMQ7 せっかくupdateいらなくなるのに
asyncio.sleepがいるってどうなん……
asyncio.sleepがいるってどうなん……
2025/09/08(月) 00:22:50.28ID:i1Wv6LLA
まぁ、ダイアログ等限定の話なら我慢できるかな。
2025/09/08(月) 17:54:12.61ID:PGku9TnQ
page.run_taskでstate変更しても反映しないな
2025/09/09(火) 22:58:43.69ID:zANAfy0I
タブ周りも結構変わっているのね。Tabsのcontentに(Columnでまとめた)TabBarとTabBarViewを入れるってことでいいの……か?
2025/09/10(水) 21:27:09.31ID:Rtl+OmsU
>>48
最後の点だけど、もうRefを使っても問題ないみたい。修正された?
生成後に部分的な状態変更を必要とするようなカスタムコントロールは、StateViewでは使えないことになるのね。基本的にカスタムコントロールで凝ったことをするのは想定してないってことなのか。
最後の点だけど、もうRefを使っても問題ないみたい。修正された?
生成後に部分的な状態変更を必要とするようなカスタムコントロールは、StateViewでは使えないことになるのね。基本的にカスタムコントロールで凝ったことをするのは想定してないってことなのか。
2025/09/11(木) 10:40:51.92ID:ZLHIwsaj
アルファ版のうちにということだろうけど、ここぞとばかりに色々弄っているな。たしかにこの先破壊的変更は入れづらくなっていくんだろうから、ここでいろいろやっておくのは良いことなんだろうね。
2025/09/18(木) 08:09:43.17ID:6zvJPGqA
明示的にupdateを書くことが(基本的には)なくなるということは、is_updateでTrueを返すようにするということは(基本的には)もうないってことでいいのかな。
ft.context.pageでどこからでもPageにアクセスできるのは地味にありがたい。カスタムコントロールの__init__の中でself.page.hogeとやって「Noneにhogeという属性はありません」と怒られるミスはよくやってしまっていたので。
ft.context.pageでどこからでもPageにアクセスできるのは地味にありがたい。カスタムコントロールの__init__の中でself.page.hogeとやって「Noneにhogeという属性はありません」と怒られるミスはよくやってしまっていたので。
2025/09/18(木) 13:05:21.93ID:DPWCUt9/
ごめん、is_updateじゃない、is_isolated だ。
2025/09/18(木) 19:18:38.40ID:t2Gbg0/Z
1.0当分かかりそうか
2025/09/20(土) 09:50:21.54ID:kxS+pQnh
いまアルファ版(0.7)で、これからベータ版(0.8)→RC版(0.9)を経て1.0 だもんね。noteの解説記事を書いている人によれば、年内くらいじゃないかという見立てのようだけど、どうなんだろうね。
2025/10/06(月) 15:14:18.20ID:QPH3iO32
focus_stopみたいな名前のプロパティでも作って、コントロールへの入力完了後に次の(フォーカスを受け取る)コントロールに自動的にフォーカスが移るようにしてくれないかなぁ……。デスクトップアリでこれがないのは流石にちょっと使いにくいので自分で書いてみたけど結構面倒くさいし、これくらいはライブラリ側に期待しても罰は当たらないと思うんだよね。
autofocusがそういうプロパティかと思っていたんだけど、アレ全然役に立たないのな。何のためにあるんだレベル。
autofocusがそういうプロパティかと思っていたんだけど、アレ全然役に立たないのな。何のためにあるんだレベル。
2025/10/07(火) 18:17:13.86ID:nb9VcTS1
コンテキストメニュー(右クリックメニュー)の機能も欲しいかな。ウェブの解説記事を参考にしてGestureDetector と Stack でそれっぽいものを作るところまではできたんだけど、メニュー以外のところをクリックしたときにメニューの表示を消すというのを簡単にする方法がわからなくて断念した。
何かしら方法はあるんだろうけど、コンテキストメニューくらいは簡単にかけるようになっていると嬉しいかな。
何かしら方法はあるんだろうけど、コンテキストメニューくらいは簡単にかけるようになっていると嬉しいかな。
2025/10/08(水) 11:38:45.62ID:5PMf8mIp
>>63
大きさ0のTextField をStackの奥側に置いておいて、そのon_blurイベントでStack を削除するようにすればそれっぽい感じにできるっぽい。
でもやっぱりもう少しちゃんとした方法が欲しいところだなー。
大きさ0のTextField をStackの奥側に置いておいて、そのon_blurイベントでStack を削除するようにすればそれっぽい感じにできるっぽい。
でもやっぱりもう少しちゃんとした方法が欲しいところだなー。
2025/10/09(木) 19:27:41.53ID:V7lTVJBy
StateViewも何か別のコンセプトに置き換わるみたい。アルファ版ということもあってか、思った以上に流動的なんだね。いじったり、勉強したりするのは1.0が出てからにした方がいいのかも。
66デフォルトの名無しさん
2025/10/16(木) 12:22:09.70ID:S5H+CbkM 触るのやめたよ
2025/10/16(木) 13:59:41.30ID:A2DLovH4
まー、本格的に触るのはもう少し仕様が安定してからでもいいかな感はあるかなぁ。正直、StateView(ControlBuilder)はメインコンセプトっぽいからさすがに変更されることはないだろうと甘く見ていたわ。たしかに新しいcomponentベースの宣言型UIの方が柔軟性は高そうではあるけれども。
ちょっとだけ触ってみたところ、状態変更が連鎖するコードだと「Set changed size during iteration」という実行時エラーで怒られるんだけど(__pending_updatesというset内の各コントロールをupdateしている最中に__pending_updates自体に追加等があったということっぽい)、何か対処法あるのかな。
ちょっとだけ触ってみたところ、状態変更が連鎖するコードだと「Set changed size during iteration」という実行時エラーで怒られるんだけど(__pending_updatesというset内の各コントロールをupdateしている最中に__pending_updates自体に追加等があったということっぽい)、何か対処法あるのかな。
2025/10/17(金) 10:48:52.13ID:NJK8gXIe
状態①の変更に伴い呼び出されるコンポーネント①のコードの中に、別の状態②の変更(それにより別のコンポーネント②のコードが呼び出される)があると67後半のエラーになるっぽい。これを許すとコントロールツリーの一貫性に問題が生じる事態が生じうるということなのかもしれない。
状態①の変更に伴い呼び出されるコンポーネント①のコードの中から別の状態②の変更を発生させるコードを一旦取り除いて、コンポーネント①の完了後にその処理を行うようにしたらエラーが出なくなった(常にこのような対応が可能かは別問題だけど)。
componentベースの宣言型UIという方向性は、個人的にはそんなに悪くない感触かな。仕様が安定するまでは触るのは程々にとどめておくけど。
状態①の変更に伴い呼び出されるコンポーネント①のコードの中から別の状態②の変更を発生させるコードを一旦取り除いて、コンポーネント①の完了後にその処理を行うようにしたらエラーが出なくなった(常にこのような対応が可能かは別問題だけど)。
componentベースの宣言型UIという方向性は、個人的にはそんなに悪くない感触かな。仕様が安定するまでは触るのは程々にとどめておくけど。
2025/11/12(水) 19:13:41.90ID:0pO79JLj
しばらく更新みてなかったけど
Reactみたいになるんか
Reactみたいになるんか
70デフォルトの名無しさん
2025/12/04(木) 13:14:05.78ID:vzedHpAU クリスマス前にバージョン1のベータ版(0.8)が来るっぽい。
レスを投稿する
ニュース
- 【サッカー】2026年北中米W杯の組み合わせが決定! 日本代表はオランダ、チュニジア、欧州プレーオフB勝者と同組で激突★3 [冬月記者★]
- 渡邊渚「性を売ってるくせに」批判に反論 幻滅「これが日本の現状だよなー」「『渾身の下着!』というような意味でやってない」★3 [Ailuropoda melanoleuca★]
- 【鮭】20代女性の車のドアノブに体液、不同意わいせつ未遂の容疑で広島市安佐北区の30歳無職男を逮捕 [nita★]
- 鈴木農相、地元JAから借入金 おこめ券巡り利害誘導との批判も★2 [安倍聖帝★]
- 【芸能】批判招いた「ドラゴンボールストア」イラスト問題に原作編集者マシリト氏が厳しく言及 問題点指摘 [湛然★]
- 米国、ホワイトカラーよりブルーカラーが重視される社会になってしまう、AIの影響で25年大卒者は就職難に直面 ★2 [お断り★]
- 【NHK他】FIFAワールドカップ2026 はじまらない組み合わせ抽選★4
- 競輪実況★1620
- とらせんIP ★2
- ハム専 サヨナラ石井
- こいせん 全レス転載禁止
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap611
- 食材となるものはな、罪があったから食材にされるんだよ
- 【高市悲報】プリキュア「いま私たちは環境問題に関心があるの」 プリオタ「ギェェェェェ思想が強すぎる!!」大炎上🔥 [762037879]
- 「あ、畳か」→画像を削除する→何も書き込まずにスレを閉じる
- ペペロンチーノ似合う具材教えて
- 今はもう動かないおじいさんにトドメ~
- 【01:45NHK~】サッカーW杯2026グルーブ分け組み合わせ抽選会いよいよスタート! ★2 [339712612]
