gpt4 book ai didi

Python KivyMD : How is it possible to use on_active on MDCheckboxes?

转载 作者:行者123 更新时间:2023-12-01 00:49:20 30 4
gpt4 key购买 nike

我目前在使用 MDCheckbox 时遇到一些问题。当我使用默认的 Kivy Checkbox 时,kv 代码中的 on_active 参数似乎工作得很好。但现在我尝试将 KivyMD MDCheckbox 模块与 MDList 一起使用,并尝试通过 on_active 参数向复选框添加函数:

部分kv代码

#: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 添加功能。我尝试设置一个带有 True/False bool 值的 active 参数(我尝试了两者,但似乎没有任何效果)。我更改了代码的某些部分以使您更容易,但如果您想查看原始源代码,您可以看到它 here 。 (在原始源代码中,MDCheckboxes 位于第 143 行。

非常感谢!

最佳答案

问题

on_active事件的 KivyMD MDCheckbox 不会触发事件。

根本原因

动态类别规则,<ListItemWithCheckbox@OneLineAvatarIconListItem>:仅具有 OneLineAvatarIconListItem 的继承并且没有 MDCheckbox 的继承。因此,on_activeMDCheckbox 时,事件不会被触发处于事件状态,而且该事件被放错了位置。

解决方案

  • 添加新的类属性,例如msg保存不同的文本。
  • 实现on_active实例化子项下的事件,MDCheckbox:
  • 将文本分配给 msg在实例化的子项下,ListItemWithCheckbox:

片段

<ListItemWithCheckbox@OneLineAvatarIconListItem>:
msg: ''
MyAvatar:
source: 'src/hdl.jpg'
MyCheckbox:
on_active: app.root.printS(root.msg)

...
ListItemWithCheckbox:
id: ckbx1
text: 'Box 1'
msg: 'Text 1'


ListItemWithCheckbox:
id: ckbx2
text: 'Box 2'
msg: 'Text 2'

ListItemWithCheckbox:
id: ckbx3
text: 'Box 3'
msg: 'Text 3'

输出

Result

关于Python KivyMD : How is it possible to use on_active on MDCheckboxes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56695463/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com