python - 如何使用 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()
解决方案
您可以通过在您的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()
并在中添加id
for :RightCheckbox
kv
<ListItemWithCheckbox>:
RightCheckbox:
id: cb
推荐阅读
- c# - 序列在 asp core 和 sql server 2016 中不包含任何元素
- iteration - Gekko 处理代数/隐式循环
- javascript - 如何处理递增和递减 ko.observables 浮点数
- python - 如何将图像(播放器)旋转到鼠标方向?
- uwp - 与 CanvasControl 相关的奇怪内存泄漏
- flutter - 滚动控制器未附加到任何滚动视图(Swiper)
- biztalk - 具有单独 TimeOutException 处理的 BizTalk Parallel Convoy 无法生成错误消息“致命错误 X1001:未知系统异常”
- flutter - 如何在颤动中显示/渲染 3D 产品文件(http 链接)?
- knime - Knime循环在不同的文件夹中写入csv文件?
- java - 编译使用单个依赖项 jar 文件的简单类时出错