Kivy 简明教程
Kivy - Recycle Layout
通常,如果一个应用程序界面需要大量的部件来显示数据项目,其性能就会下降。Kivy 中的 RecycleView 部件提供了一个灵活的替代方案。使用 RecycleView,可以只查看一个大数据集的选定部分。它能够复用部件来显示可滚动的数据项目列表。这个功能非常适用于让用户滚动产品、图像等的列表。
循环布局的机制基于 MVC(模型-视图-控制器)架构。
-
RecycleView.data 属性构成了模型层。
-
RecycleDataModel 课程实现了视图层。视图被拆分为布局和视图,并使用适配器实现。在 RecycleLayout 中定义它,RecycleLayout 是一个抽象课程。
-
对于第三个组件 - 控制器 - RecycleViewBehavior 课程,并定义逻辑交互。RecycleView 课程实现了逻辑。它在“kivy.uix.recycleview”模块中定义。
需要实例化一个 RecycleView 对象,它会自动创建视图和数据课程。RecycleView 的两个重要属性必须设置,即 viewclass 和 data。
-
viewclass − 将该属性设置为部件课程的名称。可循环利用的视图将包含该课程的对象。例如,如果 viewclass 是 Button,则循环视图将是可滚动的按钮列表。任何部件都可以用作该属性的值。
-
data −数据本质上是字典的列表,并使用这些字典根据需要生成 viewclass 的实例。这是一个字典列表,其键映射到 viewclass 的对应属性名称。例如,如果 viewclass 设置为 Button,则数据可以是字典项的列表,在每个字典中,键应该是 Button 类的一个属性。
RecycleView 窗口树还必须包括某个布局管理器,以便可以找到视图端口。有两个布局可与 RecycleView 一起使用。一个为 RecycleBoxLayout (在 “kivy.uix.recycleboxlayout” 模块中可用),另一个为 RecycleGridLayout (在 “kivy.uix.recyclegridlayout” 模块中)。布局类都继承 BoxLayout 和 GridLayout 类。
Example
让我们在 RecycleView 窗口小部件中加载 100 个按钮。它们被添加到 RecycleBoxLayout。
要将按钮用作循环视图中的元素,请将其 viewclass 设置为 Button。
它的 data 属性是字典列表。每个字典都有 '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()