В настоящее время я сталкиваюсь с некоторыми проблемами с MDCheckbox. Когда я использовал установленный по умолчанию флажок Kivy, параметр on_active
в коде kv
, казалось, работал довольно хорошо. Но сейчас я пытаюсь использовать модуль KivyMD MDCheckbox
с MDList
и пытаюсь добавить функцию в флажок с помощью параметра on_active
:
Часть кода КВ
#:kivy 1.11.0
#:import MDCard kivymd.card.MDCard
#:import MDCheckbox kivymd.selectioncontrols.MDCheckbox
#:import MDList kivymd.list.MDList
#:import OneLineAvatarIconListItem kivymd.list.OneLineAvatarIconListItem
<ListItemWithCheckbox@OneLineAvatarIconListItem>:
MyAvatar:
source: 'src/hdl.jpg'
MyCheckbox:
<LayoutPy>
orientation: 'vertical'
FloatLayout:
MDCard:
size_hint: .8, .5
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
BoxLayout:
orientation: 'horizontal'
spacing: 20
name: 'lists'
ScrollView:
MDList:
id: scroll
ListItemWithCheckbox:
id: ckbx1
text: 'Box 1'
active: False
on_active: root.printS('Text 1')
ListItemWithCheckbox:
id: ckbx2
text: 'Box 2'
active: False
on_active: root.printS('Text 2')
ListItemWithCheckbox:
id: ckbx3
text: 'Box 3'
active: False
on_active: root.printS('Text 3')
Часть кода Python
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivymd.theming import ThemeManager
from kivy.uix.image import Image
from kivymd.list import IRightBodyTouch, ILeftBody
from kivymd.selectioncontrols import MDCheckbox
from kivy.lang import Builder
class LayoutPy(FloatLayout):
def __init__(self, **kwargs):
super(LayoutPy, self).__init__(**kwargs)
def printS(self, text):
print(text)
class MyCheckbox(IRightBodyTouch, MDCheckbox):
pass
class MyAvatar(ILeftBody, Image):
pass
Builder.load_file(design.kv)
class KivyGUI(App):
theme_cls = ThemeManager()
theme_cls.primary_palette = ("Teal")
title = ("App")
def build(self):
c = LayoutPy()
return c
if __name__ == "__main__":
KivyGUI().run()
Я думаю, что в отличие от обычного Kivy, KivyMD нужен дополнительный параметр active
для добавления функций в MDCheckbox. Я попытался установить параметр active
с логическим значением True / False (я пробовал оба варианта, но ничего не получалось). Я изменил некоторые части кода, чтобы вам было легче, но если вы хотите взглянуть на исходный код, вы можете увидеть его здесь . (В оригинальном исходном коде MDCheckboxes
находятся на линии 143.
Большое спасибо заранее!