在kivy RecycleView中复选框,单击一个会影响其他人

时间:2017-07-06 08:13:10

标签: kivy

我尝试在RecycleView的每一行中放置一组两个复选框。但是,如果我单击一个复选框,则会影响其他一些复选框。 如下图:

click row 1

row 13 is impacted

第25,37行...... 以下是代码

main.py:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class Root(BoxLayout):
    def __init__(self, **kwargs):
        super(Root, self).__init__(**kwargs)
        self.rv.data = [{'value': str(x)} for x in range(100)]

class MyApp(App):
    def build(self):
        return Root()

if __name__ == '__main__':
    MyApp().run()

my.kv:

<Row@BoxLayout>:
    canvas.before:
        Color:
            rgba: 0.5, 0.5, 0.5, 1
        Rectangle:
            size: self.size
            pos: self.pos
    value: ''

    orientation: 'horizontal'
    Label:
        text: root.value
        size_hint:0.45, 1
    CheckBox:
        group: root.value
        size_hint:0.05, 1
        state: 'down'
    CheckBox:
        group: root.value
        size_hint:0.05, 1
<Root>:
    rv: rv
    RecycleView:
        id: rv
        viewclass: 'Row'
        RecycleBoxLayout:
            default_size: None, dp(56)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'

这是非常简单的代码,但我不知道为什么。 你能帮忙吗?

kivy是1.10.0

根本原因是视图类被回收用于重用。 我们可以从RecycleDataViewBehavior派生出viewclass(必须阅读代码)。 实现refresh_view_attrs。也许将复选框的状态添加到recycleview的数据中。可以参考recycleview / init .py中的SelectableLabel示例。

0 个答案:

没有答案