如何从自定义Stopwatch类中获取实例变量seconds的值?
解决Flet秒表类中提取seconds变量的问题
你当前的问题在于直接通过类Stopwatch访问seconds,但seconds是实例属性(每个Stopwatch对象独有的属性),不是类属性,必须先创建类的实例才能访问。
正确的实现方式
1. 创建实例后访问seconds
首先要实例化Stopwatch类,再通过实例对象获取seconds的值:
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.size = 25 self.weight=ft.FontWeight.W_600 self.update() await asyncio.sleep(1) self.seconds += 1 async def main(page: ft.Page): # 创建Stopwatch实例,初始秒数设为0 stopwatch = Stopwatch(0) await page.add(stopwatch) # 示例:添加按钮,点击时打印当前seconds值 def get_seconds(e): print(f"当前秒数:{stopwatch.seconds}") page.add(ft.ElevatedButton("获取当前秒数", on_click=get_seconds)) if __name__ == "__main__": ft.app(target=main)
2. 关键说明
Stopwatch(0)创建了一个初始秒数为0的秒表实例,之后通过stopwatch.seconds就能访问该实例的秒数变量。- 在Flet中,组件需要挂载到页面才能运行
did_mount方法启动计时,所以要把实例添加到page中。 - 如果需要在计时过程中获取秒数,可以通过交互控件(比如按钮)触发访问操作,或者在
update_timer方法中直接打印/处理self.seconds。
内容的提问来源于stack exchange,提问作者Pro Bany
相关产品推荐
相关产品推荐

