异步更新图标

问题描述 投票:0回答:1

我的舰队更新图标有问题,

self.value
更新完美,但为什么图标在课程开始时没有改变,它添加了图标
ft.icons.SIGNAL_WIFI_STATUSBAR_NULL_OUTLINED
但在异步中它不会在界面中更新

import asyncio
import flet as ft
import requests
import time

class Countdown(ft.Text):
    def __init__(self):
        super().__init__()
        self.running = False
        self.value = "Connecting..."
        self.icon = ft.Icon(ft.icons.SIGNAL_WIFI_STATUSBAR_NULL_OUTLINED)

    def did_mount(self):
        self.running = True
        self.update()
        self.page.run_task(self.update_timer)

    def will_unmount(self):
        self.running = False

    async def update_timer(self):
        while self.running:
            try:
                requests.get("http://www.google.com", timeout=3)
                self.value = "Connected"
                self.icon = ft.Icon(ft.icons.WIFI)
                self.chiconke()
                self.update()
                print(self.icon)
            except requests.ConnectionError:
                self.value = "Disconnected"
                self.icon = ft.icons.WIFI
                self.update()
            await asyncio.sleep(5)

def create_statusbar():
    countdown = Countdown()

    return ft.Container(
        content=ft.Row(
            [
                ft.CupertinoListTile(
                    bgcolor_activated=ft.colors.AMBER_ACCENT,
                    leading=countdown.icon,
                    title=countdown,
                    width=180,
                ),

                ft.CupertinoListTile(  # Example: API status
                    bgcolor_activated=ft.colors.AMBER_ACCENT,
                    leading=ft.Icon(name=ft.icons.API),
                    title=ft.Text(countdown.icon),
                    subtitle=ft.Text("Checking..."),  # Placeholder for dynamic update
                    width=150,
                ),

                ft.CupertinoListTile(  # Example: API status
                    bgcolor_activated=ft.colors.AMBER_ACCENT,
                    leading=ft.Icon(name=ft.icons.API),
                    title=ft.Text("API Status"),
                    subtitle=ft.Text("Checking..."),  # Placeholder for dynamic update
                    width=150,
                ),

                ft.CupertinoListTile(  # Example: API status
                    bgcolor_activated=ft.colors.AMBER_ACCENT,
                    leading=ft.Icon(name=ft.icons.API),
                    title=ft.Text("API Status"),
                    subtitle=ft.Text("Checking..."),  # Placeholder for dynamic update
                    width=150,
                ),
            ],
        ),
        border=ft.border.all(1, ft.colors.GREY_700),
        border_radius=ft.border_radius.all(10),
    )

我已经尝试了一切,异步更新文本但不更新图标。

python flet
1个回答
0
投票

Flet Text 不带图标(您可以在此处找到它要查找的内容的完整列表),因此虽然您可以将其存储为属性,但它不会显示。如果您想显示与该文本一致的图标,请将其排成一行并放入 Icon

class Countdown(ft.Row):
    def __init__(self):
        super().__init__()
        self.running = False
        self.text = ft.Text("Connecting...")
        self.icon = ft.Icon(ft.icons.SIGNAL_WIFI_STATUSBAR_NULL_OUTLINED)
        self.controls = [self.icon, self.text]

    def did_mount(self):
        self.running = True
        self.update()
        self.page.run_task(self.update_timer)

    def will_unmount(self):
        self.running = False

    async def update_timer(self):
        while self.running:
            try:
                requests.get("http://www.google.com", timeout=3)
                self.text = "Connected"
                self.icon = ft.Icon(ft.icons.WIFI)
                self.chiconke()
                self.update()
                print(self.icon)
            except requests.ConnectionError:
                self.text = "Disconnected"
                self.icon = ft.Icon(ft.icons.WIFI)
                self.update()
            await asyncio.sleep(5)

# continue your code

该行需要样式化,但这应该并排显示文本和图标

© www.soinside.com 2019 - 2024. All rights reserved.