Kivy开发待办应用新增任务仅重启后显示问题求助
问题根因
MainMenuScreen的构造函数__init__仅在应用启动、屏幕首次创建时执行一次,你从新增任务页跳转回主页时不会重新触发,所以不会重新读取文本文件的新内容。- 现有
taskRead方法存在冗余逻辑,循环创建空MDList组件,且没有清空旧的任务列表,多次调用会导致任务重复渲染。 scroll和list_view被定义为类属性,全局共享,后续修改会互相影响。
修复方案
第一步 调整MainMenuScreen类逻辑
把列表容器改为实例属性,新增页面切入时自动触发的刷新逻辑,优化任务读取方法:
import os # 放在文件顶部导入 class MainMenuScreen(Screen): listBox = ObjectProperty() theme_changer = ObjectProperty() search_task = ObjectProperty() all_tasks = ObjectProperty() important_tasks = ObjectProperty() create_list = ObjectProperty() completed_tasks = ObjectProperty() list_name = ObjectProperty() sort = ObjectProperty() rename = ObjectProperty() add_button = ObjectProperty() def __init__(self, **kw): super().__init__(**kw) # 列表容器改为实例属性,每个屏幕实例单独持有避免共享冲突 self.scroll = ScrollView() self.list_view = MDList() self.scroll.add_widget(self.list_view) self.listBox.add_widget(self.scroll) # 初始化判断任务文件是否存在,避免首次启动读文件报错 if not os.path.exists('tasks.txt'): open('tasks.txt', 'w', encoding='utf-8').close() # Kivy屏幕内置方法,每次切入该屏幕时自动执行 def on_enter(self, *args): self.taskRead() def taskRead(self): # 先清空旧任务项,避免重复渲染 self.list_view.clear_widgets() with open('tasks.txt', 'r', encoding='utf-8') as sv: arr = sv.read().strip().split('\n') # 过滤空行 arr = [i for i in arr if i.strip()] for task in arr: self.list_view.add_widget(OneLineListItem(text=task, on_press=self.scr)) def scr(self, value): self.manager.transition = FadeTransition() self.manager.current = 'goodbye_screen'
修改完成后,每次从新增任务页跳转回主页时,都会自动读取最新的任务文件内容刷新列表,无需重启应用即可看到新添加的任务。
内容的提问来源于stack exchange,提问作者Cross
相关产品推荐
相关产品推荐

