作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在使用 MDCheckbox 时遇到一些问题。当我使用默认的 Kivy Checkbox 时,kv
代码中的 on_active
参数似乎工作得很好。但现在我尝试将 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')
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_active
当 MDCheckbox
时,事件不会被触发处于事件状态,而且该事件被放错了位置。
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'
关于Python KivyMD : How is it possible to use on_active on MDCheckboxes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56695463/
我是一名优秀的程序员,十分优秀!