Kivy - 循环布局
通常,如果应用程序界面需要大量小部件来显示数据项,其性能就会下降。Kivy 中的 RecycleView 小部件提供了一种灵活的替代方案。使用 RecycleView,可以仅查看大型数据集的选定部分。它能够重复使用小部件来显示可滚动数据项列表。此功能对于让用户滚动浏览产品、图像等列表非常有用。
循环布局的机制基于 MVC(模型-视图-控制器)架构。
RecycleView.data 属性构成模型层。
RecycleDataModel 类实现视图层。视图分为布局和视图,并使用适配器实现。它在 RecycleLayout 中定义,它是一个抽象类。
对于第三个组件 - Controller - RecycleViewBehavior 类并定义逻辑交互。RecycleView 类实现逻辑。它在"kivy.uix.recycleview"模块中定义。
您需要实例化一个 RecycleView 对象,它会自动创建视图和数据类。必须设置的 RecycleView 的两个重要属性是 viewclass 和 data。
viewclass − 将此属性设置为小部件类的名称。可回收视图将由此类的对象组成。例如,如果 viewclass 是按钮,则回收视图将是可滚动的按钮列表。任何小部件都可以用作此属性的值。
data − data 本质上是一个字典列表,并根据需要使用这些字典生成 viewclass 的实例。这是一个字典列表,其键映射到 viewclass 的相应属性名。例如,如果 viewclass 设置为 Button,则 data 可以是字典项列表,在每个字典中,键应该是 Button 类的属性之一。
RecycleView 小部件树还必须包含某个布局管理器,以便可以找到视口。RecycleView 可以使用两种布局。一种是 RecycleBoxLayout(在"kivy.uix.recycleboxlayout"模块中可用),另一种是 RecycleGridLayout(在"kivy.uix.recyclegridlayout"模块中)。这两个布局类都继承了 BoxLayout 和 GridLayout 类。
示例
让我们在 RecycleView 小部件中加载一百个按钮。已添加到 RecycleBoxLayout。
要将按钮用作回收视图中的元素,请将其 viewclass 设置为 Button。
其数据属性是字典列表。每个字典都有"text"键,每个键的值是按钮标题,如 BTN 1、BTN 2 等。以下列表理解语句将字典组成为 −
data=[{'text': 'BTN {}'.format(str(x))} for x in range(20)] [{'text': 'BTN 0'}, {'text': 'BTN 1'}, {'text': 'BTN 2'}, {'text': 'BTN 3'}, {'text': 'BTN 4'}, {'text': 'BTN 5'}, {'text': 'BTN 6'}, {'text': 'BTN 7'}, {'text': 'BTN 8'}, {'text': 'BTN 9'}, {'text': 'BTN 10'}, {'text': 'BTN 11'}, {'text': 'BTN 12'}, {'text': 'BTN 13'}, {'text': 'BTN 14'}, {'text': 'BTN 15'}, {'text': 'BTN 16'}, {'text': 'BTN 17'}, {'text': 'BTN 18'}, {'text': 'BTN 19'}]
这是 RecycleView 应用的"kv"语言脚本 −
RecycleView: viewclass: 'Button' data: [{'text': 'BTN {}'.format(str(x))} for x in range(20)] RecycleBoxLayout: default_size: None, dp(56) default_size_hint: 1, None size_hint_y: None height: self.minimum_height orientation: 'vertical'
App 类只需加载这个"kv"文件,只需保留带有 pass 语句的 build() 方法即可。
from kivy.app import App from kivy.uix.button import Button from kivy.core.window import Window Window.size = (720,400) class recycled(App): def build(self): pass recycled().run()
输出
通过运行上面的 Python 脚本来测试代码的输出。 您应该获得如下所示的按钮的可滚动视图 −