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 库中的各种小部件设计而成。"kivy.uix"模块包含与小部件名称相对应的类的定义。这些类提供相应小部件对象的属性和功能。

Kivy 库中的各种小部件可归类为以下类别 −

通用小部件

这些小部件本质上是经典的,因为它们用于大多数应用程序的界面设计。标签、各种按钮类型、输入框、图像容器、滑块和进度指示器等 UX 小部件都属于此类别。

部分 UX 小部件如下所示 −

Kivy Widgets

布局

Kivy 应用窗口只能包含一个小部件作为其根对象。但是,如果您需要使用多个控件组成应用界面,则必须使用布局小部件,并在其中放置多个 UX 小部件,然后将布局作为根小部件放在应用窗口上。

可能需要注意的是,布局小部件没有自己的视觉表示。 Kivy 提供各种布局,例如网格布局、框布局、浮动布局等。

复杂的 UX 小部件

这种类型的小部件是多个经典小部件组合的结果。它们很复杂,因为它们的组装和使用不像经典小部件那样通用。

复杂小部件类别中的示例包括下拉列表、文件选择器、微调器、视频播放器、VKeyboard 等。

行为小部件

这些小部件没有自己的渲染,但会响应其子项的图形指令或交互(触摸)行为。 Scatter、Stencil View 小部件属于此类型。

屏幕管理器

管理从一个屏幕切换到另一个屏幕时的屏幕和过渡。

小部件类

kivy.uix.widget 模块中定义的 Widget 类是所有小部件类的基础。此 Widget 类中定义的常见属性(如大小、宽度、高度、pos、pos_hint 等)由其他小部件继承。

任何 Widget 对象的交互性取决于两个方面:"事件处理程序"和"属性回调"。如果在发生某种类型的事件时将小部件绑定到某个处理程序,则会调用相应的处理程序函数。

def callback(instance):
   print('Callback handler')

wid = Widget()
wid.bind(on_event=callback)

还根据某个属性调用回调函数。如果某个属性发生变化,小部件可以在"on_<propname>"回调中响应该变化。

def on_pos_change(instance, value):
   print('The widget position changed to ', value)

wid = Widget()
wid.bind(pos=on_pos_change)

基本 Widget 类和任何 Widget 都没有 draw() 方法。每个小部件都有自己的 Canvas,您可以使用它来绘制。

widget = Widget()
with widget.canvas:
   Rectangle(pos=widget.pos, size=widget.size)

可以将颜色、矩形和线条、缩放和旋转等图形指令添加到任何小部件的画布上。

在 Kivy 中,事件从第一个子项向上传播到其他子项。如果小部件有子项,则事件将通过其子项传递,然后再传递给其后的小部件。

每个小部件都通过 add_widget() 方法添加到其父级。每个添加都由一个递增索引标识。

box = BoxLayout()
l1=Label(text="a")
l1=Label(text="b")
l1=Label(text="c")
box.add_widget(l1)
box.add_widget(l2)
box.add_widget(l3)

添加标签的索引分别为 l1、l2、l3 的 0、1 和 2。您可以明确地将 index 参数提供给 add_widget() 方法。

box.add_widget(l1, index=1)
box.add_widget(l2, index=0)
box.add_widget(l3, index=2)

如果小部件排列嵌套,最内层小部件上的事件将向上传播。假设按钮是子小部件,添加到 Widget 对象本身。因此,将为两个对象调用 touch_down 回调。要确认触摸事件仅发生在按钮上,请使用 collide_points() 方法。

def callback(self, touch):
   if instance.collide_point(touch.x, touch.y):
      #consume event
      return True
   else:
      #the upper level widget processes the event

示例

一个基本的 Kivy 应用使用以下代码在添加到 Widget 对象的标签上显示一行简单的消息 −

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.core.window import Window

Window.size = (720,300)

class HelloApp(App):
   def build(self):
      w = Widget()
      l1=Label(
         text='Fortune Favours the Brave!',
         font_size=50, size=(200,100),
         pos_hint={'center_x':.5, 'center_y':.5},
         pos=(250,200)
      )
      w.add_widget(l1)
      return w

app = HelloApp()
app.run()

输出

当你运行此代码时,它将产生以下输出窗口 −

Kivy 小部件窗口