- Kivy 教程
- Kivy 首页
- Kivy 基础
- Kivy 入门
- Kivy 安装
- Kivy 架构
- Kivy 文件语法
- Kivy 应用
- Kivy - Hello World
- Kivy 应用生命周期
- Kivy 事件
- Kivy 属性
- Kivy 输入
- Kivy 行为
- Kivy 按钮
- Kivy 按钮
- Kivy 按钮事件
- Kivy 按钮颜色
- Kivy 按钮大小
- Kivy 按钮位置
- Kivy 圆形按钮
- Kivy 禁用按钮
- Kivy 图片按钮
- Kivy 组件
- Kivy 组件
- Kivy 标签
- Kivy 文本输入
- Kivy 画布
- Kivy 线
- Kivy 复选框
- Kivy 下拉列表
- Kivy 窗口
- Kivy 滚动视图
- Kivy 走马灯
- Kivy 滑块
- Kivy 图片
- Kivy 弹出窗口
- Kivy 开关
- Kivy 微调器
- Kivy 分隔器
- Kivy 进度条
- Kivy 气泡
- Kivy 标签页面板
- Kivy 散点图
- Kivy 手风琴
- Kivy 文件选择器
- Kivy 颜色选择器
- Kivy 代码输入
- Kivy 模态视图
- Kivy 切换按钮
- Kivy 相机
- Kivy 树视图
- Kivy reStructuredText
- Kivy 动作栏
- Kivy 播放器
- Kivy 模板视图
- Kivy 虚拟键盘
- Kivy 触摸涟漪
- Kivy 音频
- Kivy 视频
- Kivy 拼写检查
- Kivy 效果
- Kivy 输入记录器
- Kivy OpenGL
- Kivy 文本
- Kivy 文本标记
- Kivy 设置
- Kivy 布局
- Kivy 布局
- Kivy 浮动布局
- Kivy 网格布局
- Kivy 箱式布局
- Kivy 堆叠布局
- Kivy 锚点布局
- Kivy 相对布局
- Kivy 页面布局
- Kivy 循环布局
- Kivy 布局嵌套
- Kivy 高级概念
- Kivy 配置对象
- Kivy 图集
- Kivy 数据加载器
- Kivy 缓存管理器
- Kivy 控制台
- Kivy 动画
- Kivy 多笔划
- Kivy 时钟
- Kivy SVG
- Kivy UrlRequest
- Kivy 剪贴板
- Kivy 工厂
- Kivy 手势
- Kivy 语言
- Kivy 图形
- Kivy 绘图
- Kivy 打包
- Kivy Garden
- Kivy 存储
- Kivy 向量
- Kivy 工具函数
- Kivy 检查器
- Kivy 工具
- Kivy 日志记录器
- Kivy 帧缓冲区
- Kivy 应用和项目
- Kivy 绘图应用
- Kivy 计算器应用
- Kivy 计时器应用
- Kivy 相机处理
- Kivy 图片查看器
- Kivy 贝塞尔曲线
- Kivy 画布压力测试
- Kivy 绘制圆形
- Kivy 组件动画
- Kivy 其他
- Kivy 有用资源
- Kivy 快速指南
- Kivy 有用资源
- Kivy 讨论
Kivy 架构
阅读本章节以了解 Kivy 框架的设计架构。一方面,Kivy 提供各种组件,允许用户与应用程序交互;另一方面,它与各种硬件设备交互,例如鼠标、TUIO、音频和视频流等。中间层包含用于处理触摸输入、音频和视频、图形指令和文本输入的驱动程序或提供程序。
这是 Kivy 框架的官方架构图:
核心提供程序
Kivy 架构的一个重要特性是“模块化”和“抽象”。例如打开窗口、读取音频和视频流、加载图像等操作是任何图形应用程序的核心任务。Kivy 通过为控制硬件的驱动程序提供易于实现的 API 来抽象这些核心任务。
Kivy 使用特定于运行应用程序的操作系统的提供程序。每个操作系统(Windows、Linux、MacOS 等)都有其自身针对不同核心任务的原生 API。它们充当操作系统与 Kivy 之间的中间通信层。因此,Kivy 充分利用了操作系统公开的功能来提高效率。
使用特定于平台的库可以减小 Kivy 发行版的大小,并简化打包过程。这也使得 Kivy 更容易移植到其他平台。Android 移植从中受益匪浅。
输入提供程序
输入提供程序是一段代码,它增加了对特定输入设备的支持。Kivy 内置支持的不同输入设备包括:
- Android 操纵杆输入提供程序
- 苹果触控板
- TUIO(有形用户界面对象)
- 鼠标模拟器
- HIDInput
要添加对新输入设备的支持,请提供一个新类,该类从您的设备读取输入数据并将它们转换为 Kivy 基本事件。
图形
OpenGL 是 Kivy 框架整个图形 API 的基础。Kivy 使用 OpenGL 指令发出硬件加速的绘图命令。Kivy 通过定义易于使用的功能来消除编写 OpenGL 命令的困难部分。
Kivy 使用 OpenGL 2.0 ES(GLES 或嵌入式系统的 OpenGL),您可以使用它进行跨平台开发。
核心库
Kivy 框架的以下组成部分提供了高级抽象:
时钟 - 时钟 API 帮助您调度计时器事件。支持一次性计时器和周期性计时器。
手势检测 - 多点触控界面的重要要求。手势识别器检测各种笔划,例如圆形或矩形。您甚至可以训练它来检测您自己的笔划。
Kivy 语言 - Kivy 语言用于轻松高效地描述用户界面。这使得应用程序设计与开发应用程序逻辑分离。
属性 - Kivy 独有的属性类概念(它们与 Python 类中的属性不同)是将您的组件代码与用户界面描述链接的类。
UIX
Kivy 的用户界面是用组件和布局构建的。
组件是您添加到应用程序中以提供某种功能的 UI 元素。组件示例包括按钮、滑块、列表等等。组件接收 MotionEvents。
多个组件排列在合适的布局中。Kivy 提供满足各种用途的组件放置要求的布局类。例如网格布局或箱式布局。您还可以嵌套布局。
事件分发
术语“组件”几乎在所有图形工具包中都用于 UI 元素。任何接收输入事件的对象都是一个组件。一个或多个组件排列成树状结构。
Kivy 应用程序窗口只能容纳一个根组件,但根组件可以在树状结构中包含其他组件。因此,组件之间存在“父子兄弟”关系。
每当发生新的输入事件时,组件树的根组件首先接收该事件。根据触摸状态,事件会向下传播到组件树。
树中的每个组件都可以处理事件或将其传递给层次结构中的下一个组件。如果组件吸收并处理事件,则应返回 True,以便停止其在树中的传播,并且不会对该事件进行进一步处理。
def on_touch_down(self, touch):
for child in self.children[:]:
if child.dispatch('on_touch_down', touch):
return True
由于事件通过组件树传播,因此通常需要验证事件是否发生在预期处理该事件的某个组件的区域中。collide_point() 方法可以帮助确定此事实。此方法检查触摸位置是否落在某个组件的“监视区域”内,并返回 True 或 False。默认情况下,这检查屏幕上由组件的pos(位置;x 和 y)和size(宽度和高度)描述的矩形区域。