添加事件回调到kivy RecycleView

Dim*_*kov 0 python kivy

我正在尝试使用 kivy 创建一个应用程序。我正在使用 RecycleView 动态创建一堆按钮。我的问题是,我不确定如何在按下按钮时绑定回调,因为我不太确定代码实际上是如何制作按钮的。我需要在 RV 类中创建一个方法吗?如果是这样,我将如何在字符串生成器中将它与 kivy 语言一起使用?此外,我如何访问创建的按钮?它们存储在self.data变量中吗?最后,创建的按钮是小部件还是其他类型的数据?

from kivy.app import App, ObjectProperty 
from kivy.uix.recycleview import RecycleView 
from kivy.lang import Builder

KV = """
<RV>: 
    viewclass: 'Button' # defines the viewtype for the data items. 
    orientation: "vertical"
    spacing: 40
    padding:10, 10
    space_x: self.size[0]/3

RecycleBoxLayout: 
    color:(0, 0.7, 0.4, 0.8) 
    default_size: None, dp(56) 
    default_size_hint: 0.4, None
    size_hint_y: None
    height: self.minimum_height 
    orientation: 'vertical' # defines the orientation of data items
"""
Builder.load_string(KV)

class RV(RecycleView): 
    def __init__(self, **kwargs): 
        super().__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(100)]

class SampleApp(App): 
    def build(self):
        return RV() 

SampleApp().run() 
Run Code Online (Sandbox Code Playgroud)

另外,我对小部件和视图之间的区别感到困惑?在我的标签中指定视图类会产生影响吗?

Joh*_*son 5

回调是Button. 您可以使用on_pressor on_release,但它们必须在 中指定data。这是您的类的修改版本RV

class RV(RecycleView):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.data = [{'text': str(x), 'on_release': partial(self.butt, x)} for x in range(100)]

    def butt(self, x):
        print('button', x, 'pressed')
Run Code Online (Sandbox Code Playgroud)

生成RecycleView一堆实例viewclass(在您的情况下Button),并使用data来设置 的属性Button。因此data可以包含 a 的任何属性Button作为键,并将所需的值作为字典值。重用RecycleView(回收)这些Button实例并仅Button设置data. 可以是具有 中属性的viewclass任何类。因此,您的特定实例可能是带有 text 的实例,但稍后,同一按钮可能会显示不同的文本(也许是)。访问特定的可能没有意义。如果您想更改特定的内容,您可以更改。WidgetdataButtonRV1067ButtonButtondataButton