Flet视图无法正确更新求助:排班生成功能视图不刷新
解决Flet自定义控件内Column更新不显示及排班内容重置问题
问题原因
你的ShiftsView是UserControl自定义控件,修改其内部Column的子控件后,仅调用page.update()无法触发该自定义控件的UI刷新;另外你还需要每次点击时清除旧的排班文本,只保留按钮和新内容。
修复后的完整代码
import flet from flet import Text, UserControl, ElevatedButton, Column from .controller import Controller class ShiftsView(UserControl): def __init__(self, page, controller): super().__init__() self.page = page self.controller = controller self._add_listeners() def _add_listeners(self): def run_shifts(workers): print(workers) self.show_workers(workers) self.controller.add_listener('WORKERS::RUN_SHIFTS', run_shifts) def build(self): self.page_view = Column( controls=[ ElevatedButton("Generate shift", on_click=self.button_clicked), ] ) return self.page_view def button_clicked(self, e): self.controller.get_shifts() # 无需在此调用page.update(),listener触发的show_workers会处理更新 def show_workers(self, workers): print("workers", workers) # 保留Column中的按钮,清空之前的排班文本 self.page_view.controls = [self.page_view.controls[0]] # 添加新的排班人员文本 for w in workers: self.page_view.controls.append(Text(w[0])) # 更新当前自定义控件,触发内部UI刷新 self.update()
关键修改点
- 清空旧内容:每次生成新排班时,重置
Column的controls列表,只保留初始的按钮控件,确保旧的排班文本被清除。 - 正确触发更新:调用
self.update()替代self.page.update(),因为修改的是自定义控件内部的子元素,需要触发该控件自身的UI刷新。 - 移除冗余更新:按钮点击事件中无需调用
page.update(),避免不必要的全局刷新。
内容的提问来源于stack exchange,提问作者winttuu
相关产品推荐
相关产品推荐

