使用Kivy的RecycleView进行类继承

问题描述 投票:0回答:1

我试图创建一个通用的RecycleView,并从它那里继承改变视图类,像这样。

<GenericList@RecycleView>:
    SelectableRecycleBoxLayout:
        canvas.before:
            Color:
                rgba: (.0, 0.9, .5, .8)
            Rectangle:
                pos: self.pos
                size: self.size
        default_size: None, 30
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: False

<SetList@GenericList>:
    viewclass: 'SetSelectableLabel'
<CardList@GenericList>:
    viewclass: 'CardSelectableLabel'

SetSelectableLabel和CardSelectableLabel之间的区别只是方法被调用的事件on_selected.我注意到,当用这个配置运行一个应用程序时,RecycleView不会显示任何视图类对象。列表是存在的,我可以滚动它,并看到滚动条在移动,但没有任何标签被显示。

但如果我像下面这样在RecycleView中定义viewclass,一切都能正常工作,只是我不能做我想要的事情,即改变继承类上的viewclass以实现自定义行为。

<GenericList@RecycleView>:
    viewclass: 'GenericSelectableLabel'

我是不是遗漏了什么?

python kivy kivy-language
1个回答
1
投票

RecycleView 是一个不完整的widget。有很多事情你不能。比如说

rv = RecycleView()
rv.add_widget(RecycleBoxLayout())

上面的代码不能用 你必须像这样从kv中构造一个widget树。

RecycleView:
    RecycleBoxLayout:

viewclass 就是其中之一. 你不能动态地改变它,所以下面的代码。

rv = Bulider.load_string('''
RecycleView:
    RecycleBoxLayout:
''')
rv.viewclass = 'Label'  # doesn't work

不能用 我不确定这是问题的原因,但你只需要意识到这种不完整性。

© www.soinside.com 2019 - 2024. All rights reserved.