python - 如何在 Kivymd 列表中激活列表
问题描述
这是示例中的代码。这里有一个猕猴桃标记。但是如何赋予这个代码功能。例如,这样在取消复选框后,该项目就会从列表中消失。我只能删除图标。我尝试在那里添加 on_release 函数,但它并没有解决问题。
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivymd.app import MDApp
from kivymd.uix.list import IRightBodyTouch, OneLineAvatarIconListItem
from kivymd.uix.selectioncontrol import MDCheckbox
from kivymd.icon_definitions import md_icons
KV = '''
<ListItemWithCheckbox>:
IconLeftWidget:
icon: root.icon
RightCheckbox:
BoxLayout:
ScrollView:
MDList:
id: scroll
'''
class ListItemWithCheckbox(OneLineAvatarIconListItem):
'''Custom list item.'''
icon = StringProperty("android")
class RightCheckbox(IRightBodyTouch, MDCheckbox):
'''Custom right container.'''
class MainApp(MDApp):
def build(self):
return Builder.load_string(KV)
def on_start(self):
icons = list(md_icons.keys())
for i in range(30):
self.root.ids.scroll.add_widget(
ListItemWithCheckbox(text=f"Item {i}", icon=icons[i])
)
MainApp().run()
解决方案
首先,您需要创建一个方法从滚动小部件中删除小部件,该小部件将获取ListItemWithCheckbox
实例并将其从列表中删除,只需链接如下
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivymd.app import MDApp
from kivymd.uix.list import IRightBodyTouch, OneLineAvatarIconListItem
from kivymd.uix.selectioncontrol import MDCheckbox
from kivymd.icon_definitions import md_icons
KV = '''
<ListItemWithCheckbox>:
IconLeftWidget:
icon: root.icon
RightCheckbox:
# add this line that will call the remove widget when we change the check box state and will pass the
# ListItemWithCheckbox widget that will be removed from the list
on_active:app.remove_widget(root)
BoxLayout:
ScrollView:
MDList:
id: scroll
'''
class ListItemWithCheckbox(OneLineAvatarIconListItem):
'''Custom list item.'''
icon = StringProperty("android")
class RightCheckbox(IRightBodyTouch, MDCheckbox):
'''Custom right container.'''
class App(MDApp):
def build(self):
return Builder.load_string(KV)
# create method to remove list item
def remove_widget(self, widget):
print(widget.text)
self.root.ids.scroll.remove_widget(widget)
def on_start(self):
icons = list(md_icons.keys())
for i in range(30):
self.root.ids.scroll.add_widget(
ListItemWithCheckbox(text=f"Item {i}", icon=icons[i])
)
App().run()
推荐阅读
- typescript - 使用泛型或继承哪种方式更正确?
- vb.net - 修改天真的搜索算法以允许容忍
- wordpress - 如何禁用 WordPress 网站的浏览器阅读器视图
- amazon-web-services - AWS StepFunction:从异步执行结束根 Stepfunction 执行
- c# - 将数组从一行复制到一个数组对象中-“_numbersArray 从未分配给,并且始终具有其默认值 null”
- json - Aeson:将 JSON 对象转换为键、值类型的列表
- linux - FTP 大小命令在 linux shell 中运行,但在 bash 脚本中不起作用
- javascript - 使用 javascript 显示/隐藏 html 元素
- google-maps - 谷歌地图 iframe 不适用于沙盒
- google-cloud-platform - 创建和管理 Google 群组