如何在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
预期
我想我有办法解决我自己的问题。 (我是 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意味着它没有被检查
这只有在检查为真时才有效
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
预期
我想我有办法解决我自己的问题。 (我是 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意味着它没有被检查
这只有在检查为真时才有效