如何将值从函数传递到ft.Text(框架FLET)?

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

我想使用 FletPython 中创建一个简单的秒表,如何从 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重复同样的成功)

python flet
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.