如何在KivyMD中检查是否选择了MDChip?

How to check if a MDChip is selected in KivyMD?

Python 3.9.0

目标

一种查找当前是否选择了 MDChip 的方法

问题

使用 MDChips 的 check 属性来确定芯片是否被选中 returns True 即使芯片被选中。 我希望它在未选择芯片时 return false

示例代码

from kivy.lang import Builder
from kivymd.uix.screen import Screen
from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.chip import MDChip

KV = '''
MDRaisedButton:
    id: button
    text: "PRESS ME"
    pos_hint: {"center_x": .5, "center_y": .5}
    on_release: app.testing()
'''


class Test(MDApp):
    def build(self):
        self.screen = Screen()
        btn = Builder.load_string(KV)

        self.screen.add_widget(btn)
        return self.screen
    
    def testing(self):
        objects = {0.2 : "Item 1", 0.5 : "Item 2", 0.8 : "Item 3"}
        for pos, item in objects.items():
            chip = MDChip(
                text = item,
                check = True,
                pos_hint = {"center_x":pos, "center_y":0.4},
                on_release = self.fetch
            )
            self.screen.add_widget(chip)

    def fetch(self, chip_instance):
        if chip_instance.check == True:
            print("True")
        else:
            print("False")


Test().run()

KV script is in the main.py file provided above

预期

The image is taken from this documentation

我想我有办法解决我自己的问题。 (我是 KivyMD 的新手,可能会有比我更好的解决方案的人)

解决方案

def fetch(self, chip_instance):
        if chip_instance.color == [0.12941176470588237, 0.5882352941176471, 0.9529411764705882, 1.0]:
            chip_instance.color = [1,0,0,1]
        else:
            chip_instance.color = [0.12941176470588237, 0.5882352941176471, 0.9529411764705882, 1.0]

        if chip_instance.color == [1.0, 0.0, 0.0, 1.0]:
            print("selected")
        else:
            print("not selected")

我试图根据芯片的颜色来确定选择了哪个芯片。 我制作了 2 个 if-else 块

如果 - 否则

1.改变筹码的颜色

2。根据其颜色确定选择哪个筹码

如果您正在使用 check = True

如上图

您可以创建一个新的 class 并覆盖 on_touch_down 方法

class SubtitlesChip(MDChip):
    label = 'Subtitles'
    icon = 'closed-caption-outline'
    radius = dp(5)
    check = True

    def on_touch_down(self, touch):
        super(SubtitlesChip, self).on_touch_down(touch)
        is_checked = False
        if self.ids.box_check.children:
            checked = True
        self.do_something(is_checked)

    def do_something(self, checked):
        print(checked)
        # do something else

如果box_check没有children意味着它没有被检查

这只有在检查为真时才有效