首页 > 解决方案 > 如何使用 kivy 检测选中的复选框

问题描述

多亏了这段代码,我可以创建界面来呈现信息列表。但是,当我单击“保存”按钮时,我需要创建一个函数我打印在 CheckBox 中选择的所有文本项

from kivy.lang import Builder

from kivymd.app import MDApp
from kivymd.uix.list import ILeftBodyTouch, TwoLineAvatarIconListItem
from kivymd.uix.selectioncontrol import MDCheckbox


KV = """
<ListItemWithCheckbox>:

    RightCheckbox:


BoxLayout:

    ScrollView:

        MDList:
            id: scroll
            
    MDRaisedButton:
        text: "Save"
"""


class ListItemWithCheckbox(TwoLineAvatarIconListItem):
    """Custom list item."""



class RightCheckbox(ILeftBodyTouch, MDCheckbox):
    """Custom right container."""


class MainApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        for i in range(15):
            self.root.ids.scroll.add_widget(
                ListItemWithCheckbox(text=f"Item {i}", secondary_text=f"Item {i+10}")
            )


MainApp().run()

标签: pythonkivy

解决方案


您可以通过在您的App

def save_checked(self):
    mdlist = self.root.ids.scroll  # get reference to the MDList
    for wid in mdlist.children:
        if isinstance(wid, ListItemWithCheckbox):  # only interested in the ListItemWithCheckboxes
            cb = wid.ids.cb  # use the id defined in kv
            if cb.active:  # only print selected items
                print(wid.text, wid.secondary_text)

然后修改kv以在发布时调用该方法Button

MDRaisedButton:
    text: "Save"
    on_release: app.save_checked()

并在中添加idfor :RightCheckboxkv

<ListItemWithCheckbox>:

    RightCheckbox:
        id: cb

推荐阅读