pythonのfletでViewの使い方について
PythonのGUIライブラリであるfletで、別のViewで画像を循環表示出来るようにしましたが、下記コードでは、画像表示の切り替えの度mainpageのviewに戻り再度表示viewに移る様になっています。しかしながら連続操作の場合など途中でmainpageで止まったままになったり動きがぎこちなくなったりスローになったりします。Viewの使い方を理解しないまま強引に作ったコードなので当たり前の結果です。前の質問の流れで申し訳ありませんが、まず、使い方が間違っているかどうか、間違っているならば正しい方法を、もしかしてこの方向が正しいのならばどこをどう修正すればスムーズな動きになる様になるかお教えください。
import flet as ft
def main(page: ft.Page):
page.title = "Routes Example"
# 画像のURLリスト
images = [
"GUI/s.png",
"GUI/frog2.png",
"GUI/b.jpg"
]
image = ft.Image(src=images, width=300, height=200)
current_image_index = [0] # 現在の画像のインデックスを格納するリスト
# 次の画像に移動するボタン
def next_image(e):
if current_image_index[0] < len(images) - 1:
current_image_index[0] += 1
page.go("/")
page.go("/store")
else:
current_image_index[0] = 0 # 最後の画像の後は最初に戻る
page.go("/")
page.go("/store")
image.src = images[current_image_index[0]]
page.update()
# 前の画像に移動するボタン
def prev_image(e):
if current_image_index[0] > 0:
current_image_index[0] -= 1
page.go("/")
page.go("/store")
else:
current_image_index[0] = len(images) - 1 # 最初の画像の前は最後の画像に移動
page.go("/")
page.go("/store")
image.src = images[current_image_index[0]]
page.update()
def route_change(route):
page.views.clear()
page.views.append(
ft.View(
"/",
[
ft.AppBar(title=ft.Text("Flet app"), bgcolor=ft.Colors.AMBER_600),
ft.ElevatedButton("Visit Store", on_click=lambda _: page.go("/store")),
],
)
)
if page.route == "/store":
page.views.append(
ft.View(
"/store",
[
ft.AppBar(title=ft.Text("Store"), bgcolor=ft.Colors.BLUE_GREY_200),
ft.Image(src=images[current_image_index[0]], width=300, height=200),
ft.Row([ft.ElevatedButton(text="前の画像", on_click=prev_image),ft.ElevatedButton(text="次の画像", on_click=next_image)]),
ft.ElevatedButton("Go Home", on_click=lambda _: page.go("/")),
],
)
)
page.update()
def view_pop(view):
page.views.pop()
top_view = page.views[-1]
page.go(top_view.route)
page.on_route_change = route_change
page.on_view_pop = view_pop
page.go(page.route)
ft.app(target=main)
さらに、欲を言えばmainにPickerでパスの選択をしその値を一時保存してそのリストで循環表示出来ればと思っています。