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 ScrollView 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 VKeyboard 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 Atlas Kivy 数据加载器 Kivy 缓存管理器 Kivy 控制台 Kivy 动画 Kivy MultiStroke Kivy 时钟 Kivy SVG Kivy UrlRequest Kivy 剪贴板 Kivy 工厂 Kivy 手势 Kivy 语言 Kivy 图形 Kivy 绘图 Kivy 打包 Kivy Garden Kivy 存储 Kivy 矢量 Kivy Utils Kivy Inspector 工具 Kivy 工具 Kivy 日志 Kivy 帧缓冲区

Kivy 应用程序和项目

Kivy 绘图应用程序 Kivy 计算器应用程序 Kivy 秒表应用程序 Kivy 相机处理 Kivy 图像查看器 Kivy 贝塞尔曲线 Kivy 画布应力 Kivy 圆形绘制 Kivy 小部件动画 Kivy 杂项

Kivy - 架构

阅读本章以了解 Kivy 框架的设计架构。一方面,Kivy 提供各种小部件,让用户与应用程序交互,另一方面,它与各种硬件设备(如鼠标 TUIO、音频和视频流等)交互。中间层由驱动程序或提供程序组成,用于处理触摸输入、音频和视频、图形指令和文本输入。

这是 Kivy 框架的官方架构图 −

Kivy Architecture

核心提供程序

Kivy 架构的一个重要特征是"模块化"和"抽象"。打开窗口、读取音频和视频流、加载图像等操作是任何图形应用程序中的核心任务。 Kivy 通过为控制硬件的驱动程序提供易于实现的 API 来抽象这些核心任务。

Kivy 使用特定于运行应用程序的操作系统的提供程序。每个操作系统(Windows、Linux、MacOS 等)都有自己的本机 API 用于不同的核心任务。它们充当操作系统与 Kivy 之间的中间通信层。因此,Kivy 充分利用操作系统公开的功能来提高效率。

使用特定于平台的库可减少 Kivy 发行版的大小并使打包更容易。这也使将 Kivy 移植到其他平台变得更加容易。Android 端口从中受益匪浅。

输入提供程序

输入提供程序是一段添加对特定输入设备支持的代码。 Kivy 内置支持的不同输入设备包括 −

  • Android 操纵杆输入提供程序
  • Apple 的触控板
  • 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(宽度和高度)描述的矩形区域。