通过Kivy中的选定项目更改变量

时间:2018-05-16 15:19:26

标签: python python-3.x kivy

所以我学习Kivy,但我被ListViewListView似乎被弃用了RecycleView

我的问题是,我希望带有species_text ID的标签根据我点击的项目进行更改,一旦标签在视图中。

该文档帮助我制作了SelectableLabel并能够点击/着色它,但我不知道如何通过{{1的数据列表更改species_text的文本1}}或如何在RecycleView类中保存数据列表。

这是我的代码:

ScreenTest

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

apply_selection()方法有RecycleView个参数,考虑到我们可以创建一个包含所选文本的属性,然后我们使用Label的文本进行绑定:

    ...
    RecycleView:
        id: species_list_view
        data: [{'name': "Species1", "text": "S1"}, {'name': "Species2", "text": "S2"}]
        viewclass: 'SelectableLabel'
        text_selected: "" # create property

        SelectableRecycleBoxLayout:
            ...

    Label:
        id: species_text
        text: "Speciestext" if not species_list_view.text_selected else species_list_view.text_selected # apply binding
    ...

 def apply_selection(self, rv, index, is_selected):
    ''' Respond to the selection of items in the view. '''
    self.selected = is_selected
    if is_selected:
        print("selection changed to {0}".format(rv.data[index]))
        rv.text_selected  = rv.data[index]['text'] # set text
    else:
        print("selection removed for {0}".format(rv.data[index]))

答案 1 :(得分:0)

当您选择SelectableLabel时,您必须找到“species_text”标签并更改其文本。 一种方法是使用“apply_selection”方法。

    if is_selected:
        for screen in App.get_running_app().root.screens:
            if screen.name == "screen_test":
                screen.ids.species_text.text = rv.data[index]["name"]

P.S。 kv代码中有一个拼写错误: “touch_multiselect”属性写为“touc_multiselect”