我的舰队更新图标有问题,
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),
)
我已经尝试了一切,异步更新文本但不更新图标。
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
该行需要样式化,但这应该并排显示文本和图标