You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用kv文件的Kivy项目中刷新ScreenList的GridLayout列表

问题原因

你当前的ScreenList页面的列表数据加载逻辑写在__init__初始化方法中,该方法仅会在页面首次创建时执行一次,后续从详情页跳转回列表页时不会重新触发,因此数据库更新后列表页展示的仍是旧的渲染结果。

修复方案

  1. 将列表页加载数据的逻辑从__init__中抽为独立方法,每次进入列表页时重新加载最新数据
  2. 进入列表页时先清空原有控件,再渲染新的列表内容
  3. 顺带修复ScreenDetail中SQL查询参数的语法错误(参数需要传元组,否则会触发参数不匹配报错)

修改后的核心代码

1. ScreenList类调整

class ScreenList(Screen):
    data_grid = ObjectProperty()
    
    def go_to_detail(self, instance):
        global cur_id
        cur_id = int(instance.text)
        self.manager.current = 'screen_detail'
    
    def __init__(self, **kwargs):
        super(ScreenList, self).__init__(**kwargs)
        self.data_grid.bind(minimum_height=self.data_grid.setter('height'))
    
    # 新增on_enter方法,每次进入页面时自动触发
    def on_enter(self):
        # 清空原有列表控件
        self.data_grid.clear_widgets()
        # 重新查询数据库加载最新数据
        con_list_course = sqlite3.connect(db_path)
        con_list_course.row_factory = donnee_dic
        curss_list_course = con_list_course.cursor()
        data_list_course = curss_list_course.execute("select  * FROM courses")
        for row in data_list_course:
            template_screen = GridLayout(cols=2, size_hint_y=None, height=40)           
            template_screen.add_widget(Label(text=row['nom']))
            template_screen.add_widget(Button(text=str(row['id']), on_press=self.go_to_detail))
            self.data_grid.add_widget(template_screen)
        con_list_course.close()

2. ScreenDetail的on_enter方法调整

def on_enter(self):
    global cur_id
    conn = sqlite3.connect(db_path)
    # 修复参数格式,必须传入元组
    cursor = conn.execute("select  * FROM courses where id=?", (str(cur_id),))
    for row in cursor:      
        self.label_id.text = str(row[0])
        self.label_nom.text = str(row[1])
    cursor.close()

修改完成后,每次从详情页跳转回列表页时,都会自动触发on_enter方法重新加载最新的数据库数据渲染列表,即可实现列表正常刷新。

内容的提问来源于stack exchange,提问作者Bak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:27:03