带有复选框的 Kivy MDList。选择带有活动复选框的正确项目

时间:2021-02-17 16:28:05

标签: python kivy kivy-language kivymd

我使用文档中的此方法 https://kivymd.readthedocs.io/en/latest/components/list/index.html#custom-list-item 创建一个带有复选框的列表。我使用带有组选项的复选框。一切都很好。但我不知道如何访问正确的复选框?我如何理解列表的哪个元素包含活动复选框?

我的 PY 文件

class ListItemWithCheckbox(OneLineAvatarIconListItem):
    '''Custom list item.'''
    icon = StringProperty("android")


class RightCheckbox(IRightBodyTouch, MDCheckbox):
    '''Custom right container.'''
    def on_checkbox_active(self, checkbox, value):
        if value:
            print('The checkbox', checkbox, 'is active', 'and', checkbox.state, 'state')
            print(value)
        else:
            print('The checkbox', checkbox, 'is inactive', 'and', checkbox.state, 'state')
            print(value)

class DatabaseListScreen(Screen):
    store = JsonStore('Config/database_settings.json')
    def on_enter(self, *args):
        icons = list(md_icons.keys())
        with open('Config/Database_settings.json', 'r', encoding='utf-8') as fh:
            data = json.load(fh)
        for i in range(3):
            self.ids.scroll.clear_widgets()
        for i in range(3):
            config_name = data["Database"][i]["config"]
            listitem = ListItemWithCheckbox(text=config_name, icon=icons[i])
            self.ids.scroll.add_widget(listitem)




    def build(self):
        return Builder.load_file("Enter/DatabaseListScreen.kv")

KV:

<ListItemWithCheckbox>:

    IconLeftWidget:
        icon: root.icon

    RightCheckbox:
        group: 'group'
        on_active: self.on_checkbox_active(*args)
<DatabaseListScreen>:
    name: "database_list_screen"
    BoxLayout:
        orientation: "vertical"

        ScrollView:

            MDList:
                id: scroll
    MDRaisedButton:
        text: 'Назад'
        multiline: True
        halign: "center"
        pos_hint: {"center_x": .5, "center_y": .4}
        on_press: app.root.current = 'database_settings_screen'

1 个答案:

答案 0 :(得分:0)

<ListItemWithCheckbox>

    [...]

    RightCheckbox:
        id: check
        [...]


def get_active_check(self):
    for ListItemWithCheckbox in self.DatabaseListScreen.ids.scroll.children:
        if ListItemWithCheckbox.ids.check.active:
            print(ListItemWithCheckbox)
            break
相关问题