Kivy:用ListAdapter或DictAdapter更新到ListView数据不会改变按钮tex

2024-06-17 11:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在容器小部件中,我有一个带有适配器的ListView

list_item_args_converter = \
        lambda row_index, selectable: \
        {'text': "[{}] {}: {}".format(row_index, selectable['t'], selectable['v']),
        'size_hint_y': None, 'height': 25}

my_list_adapter = \
    ListAdapter(data=my_data,
                args_converter=list_item_args_converter,
                selection_mode='single',
                allow_empty_selection=False,
                cls=ListItemButton)

self.list_view = ListView(adapter=my_list_adapter)
self.add_widget(self.list_view)

my_data = [{'t':str(i), 'v':random.randint(1,10)} for i in range(5)]。 我天真地假设mv.list_view.adapter.data[0]['v'] = '42'(其中mv是容器小部件)在列表上分派一个更改事件,从而将第一个列表视图按钮的文本更改为“[0] 0: 42”。在

但什么也没发生。在

同样地,如果适配器是DictAdapter,并且其更改方式类似(即,如果dict的值本身是dict,则更改这些{}),则不会发生任何事情。在


Tags: selfviewdataadapter部件myargsitem
1条回答
网友
1楼 · 发布于 2024-06-17 11:25:39

只有在项是appended、inserted、removed、poped、sliced、sorted等情况下才会触发更改事件,但如果项目的标识保持不变,则不会触发更改事件。在类似问题的情况下,必须手动调度更改事件。如果adapterListAdapter,可以这样做:

adapter.data.prop.dispatch(adapter.data.obj())

DictAdapter的情况下,以下是适当的:

^{pr2}$

)这让我损失了一天的生命。希望其他人发现这个有用…)

相关问题 更多 >