我想使用 Flet 在 Python 中创建一个简单的秒表,如何从 while 循环中获取我的值?
import flet as ft
from time import sleep
def stopwatch():
time = 0
str_time = ''
while True:
time += 1
str_time = str(time)
print(str_time, time) #for check work or not
sleep(1)
def main(page: ft.Page):
t = ft.Text(value=stopwatch(), color='red') #no value is transmitted
page.controls.append(t)
page.update()
ft.app(target=main)
我尝试使用 return 并传递了值 1,但 while 循环停在那里。 可能我对Python了解不多,尤其是Flet,但我设法使用TKinter编写了这样一个简单的程序,我想用Flet重复同样的成功)
flet 参考中有一个倒计时器的示例。这是一个自定义文本控件。要在后台运行它,您可以使用 page.run_task() 来执行实现逻辑的方法。本示例已更改为秒表规格。
import asyncio
import flet as ft
class Stopwatch(ft.Text):
def __init__(self, seconds):
super().__init__()
self.seconds = seconds
def did_mount(self):
self.running = True
self.page.run_task(self.update_timer)
def will_unmount(self):
self.running = False
async def update_timer(self):
while self.seconds >= 0 and self.running:
mins, secs = divmod(self.seconds, 60)
self.value = "{:02d}:{:02d}".format(mins, secs)
self.update()
await asyncio.sleep(1)
self.seconds += 1
def main(page: ft.Page):
page.add(Stopwatch(0))
ft.app(main)