0

Python 3.9.0

目标

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

问题

使用checkMDChips 的属性来确定是否选择了芯片返回True,即使该芯片被选择与否。我希望它在未选择芯片时返回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 脚本在上面提供的 main.py 文件中

期望

我想从芯片中选择多个值并将它们传递给一个函数

图片取自本文档

4

2 回答 2

0

我想我有办法解决我自己的问题。(我对 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.根据颜色判断选择哪个芯片

于 2021-03-22T07:25:09.637 回答
0

如果您正在使用check = True

如上图所示

您可以创建一个新类并覆盖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 没有子级意味着它没有被选中

这仅在检查为 True 时才有效

于 2021-05-29T19:31:27.537 回答