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 库中的所有 GUI 小部件都具有 Canvas 属性。Canvas 是用于绘制各种对象(例如矩形、椭圆等)的地方。必须注意的是,Kivy 没有单独的 Canvas 小部件来绘制形状。所有小部件的画布共享一个公共坐标空间。

在 Kivy 中,绘图是在与任何小部件相关的 Canvas 上完成的,使用顶点指令和上下文指令。

  • 顶点指令 − 用于绘制基本几何形状(如线条、矩形、椭圆等)的指令称为顶点指令。

  • 上下文指令 −这些指令不会绘制任何东西,但会操纵整个坐标空间,因此要为其添加颜色,请旋转、平移和缩放它。

顶点指令

这些指令以不同的顶点对象的形式添加到 Canvas 中。顶点类在 kivy.graphics.vertex_instructions 模块中定义。如上所述,绘制指令被添加到 Canvas 的上下文中。

with self.canvas:
   vertex(**args)

vertex_instructions 模块包含以下类 −

  • Bezier

  • BorderImage

  • Ellipse

  • Line

  • Mesh

  • Point

  • Quad

  • Rectangle

  • RoundedRectangle

  • SmoothLine

  • Triangle

Bezier

贝塞尔曲线由一些控制点加权,我们将其包含在指令中。在 Kivy 中,贝塞尔是一个顶点画布指令,它从作为参数提供给 Beizer 构造函数的一组点中绘制此曲线。

from kivy.graphics import Beizer
with self.canvas:
   Beizer(**args)

参数

以下参数在 Beizer 类 − 中定义

  • points − 格式为 (x1, y1, x2, y2…) 的点列表

  • loop − bool,默认为 False,设置贝塞尔曲线以连接最后一个点和第一个点。

  • segments − int,默认为 180。定义绘制曲线所需的段数。段数越多,绘制越平滑。

  • dash_length − 段的长度(如果为虚线),默认为 1。

  • dash_offset −一个线段的末端与下一个线段的起点之间的距离,默认为 0。更改此值会使其变为虚线。

示例

self.w=Widget()
with self.w.canvas:
   Color(0,1,1,1)
   Bezier(
      points=[700,400,450,300,300,350,350, 200,200,100,150,10],
      segments=20
   )
   Color(1,1,0,1)
   Point(
      points =[700,400,450,300,300,350,350, 200,200,100,150,10],
      pointsize= 3
   )

输出

它将产生以下输出窗口 −

kivy drawing bezier

此处显示的点仅供参考。

Ellipse

在 Kivy 框架中,椭圆是一个顶点指令。根据所需的段,它可以显示多边形、矩形或圆弧。如果宽度和高度参数相等,则结果为圆形。

from kivy.graphics import Ellipse
with self.canvas:
   Ellipse(**args)

参数

以下参数在 Ellipse 类 − 中定义

  • pos − 两个元素元组,给出椭圆中心的 X 和 Y 坐标值。

  • size − 两个元素元组,定义椭圆的宽度和高度(以像素为单位)。

  • angle_start − 浮点数,默认为 0.0,指定起始角度(以度为单位)。

  • angle_end − 浮点数,默认为 360.0,指定结束角度(以度为单位)。

  • segments − 椭圆的段数。如果线段较多,椭圆的绘制会更平滑。使用此属性可创建具有 3 条或更多条边的多边形。小于 3 的值将不会显示。

示例

self.w=Widget()
with self.w.canvas:
   Color(0.5, .2, 0.4, 1)
   d = 250
   Ellipse(pos=(360,200), size=(d+75, d))

输出

它将生成以下输出窗口 −

Kivy Drawing Ellipse

Rectangle

此顶点指令根据作为参数给出的位置和尺寸在画布上绘制一个矩形。

from kivy.graphics import Rectangle
with self.canvas:
   Rectangle(**args)

参数

以下参数在 Rectangle 类 − 中定义

  • pos − 整数列表,指定矩形的位置,格式为 (x, y)。

  • size − 整数列表,矩形的大小,格式为 (width, height)。

绘制一个填充特定颜色的矩形是为标签提供背景的推荐方法。

示例

def build(self):
   widget = Widget()
   with widget.canvas:
   Color(0, 0, 1, 1)
      Rectangle(
      pos=(50, 300), size_hint=(None, None),
      size=(300, 200)
   )
   lbl = Label(
      text='Hello World', font_size=24,
      pos=(Window.width / 2, 300), size=(200, 200),
      color=(0, 0, 1, 1)
   )
   with lbl.canvas.before:
      Color(1, 1, 0)
      Rectangle(pos=lbl.pos, size=lbl.size)
   
   widget.add_widget(lbl)
   
   return widget

输出

它将产生以下输出窗口 −

Kivy Drawing Rectangle

可能需要注意的是,Quad 是四边形,具有四个顶点的多边形,不一定是矩形。同样,圆角矩形是具有圆角顶点的矩形。

Line

在 Kivy 图形中,Line 是一种基本的顶点指令。Line 对象构造函数的 points 属性具有连续点的 x 和 y 坐标。Kivy 绘制一条连接这些点的线。

from kivy.graphics import Line
with self.canvas:
   Line(**args)

参数

以下参数在 Line 类 − 中定义

  • points − 格式为 (x1, y1, x2, y2…) 的点列表

  • dash_length − int 线段的长度(如果为虚线),默认为 1。

  • dash_offset − 一个线段的末尾和下一个线段的开头之间的偏移量,默认为 0。更改此值将使其成为虚线。

  • dashes − 格式为 [ON length, offset, ON length, offset, …] 的整数列表。例如[2,4,1,6,8,2] 将创建一条线,第一条虚线长度为 2,然后偏移量为 4,然后虚线长度为 1,然后偏移量为 6,依此类推。

  • width − float - 定义线的宽度,默认为 1.0。

示例

def build(self):
   box = BoxLayout(orientation='vertical')
   self.w = Widget()
   with self.w.canvas:
      Color(1, 0, 0, 1)
      Line(
         points=[700, 400, 450, 300, 300, 350, 350, 200, 200,  100, 150, 10],
         width=4
      )
      box.add_widget(self.w)
      
   return box

输出

它将生成以下输出窗口 −

Kivy Drawing Line

Line 类还具有贝塞尔、椭圆、圆形、矩形等属性,线点可用于绘制相应的形状。

Triangle

使用此顶点指令,Kivy 使用点列表绘制三角形。

from kivy.graphics import Triangle
with self.canvas:
   Triangle(**args)

points 属性是三角形三个顶点的 x 和 y 坐标列表,格式为 (x1, y1, x2, y2, x3, y3)。

示例

self.w=Widget()
with self.w.canvas:
   Color(1,1,1,1)
   self.triangle = Triangle(points=[100,100, 300,300, 500,100])

输出

它将产生以下输出窗口 −

Kivy Drawing Triangle

更新绘图

必须注意,所有图形指令类(例如 Triangle.points、Mesh.indices 等)的列表属性不是 Kivy 属性,而是 Python 属性。因此,修改此列表不会更新绘图。只有当列表对象本身发生变化时,它才会更新,而不是在修改列表值时更新。

让我们通过将点 (300,300) 更改为 (400,300) 来更改上述矩形的顶点。我们在上面的布局中添加一个按钮并将其与更新方法绑定。

示例

这是完整的代码 −

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import *
from kivy.properties import ObjectProperty
from kivy.core.window import Window

Window.size = (720, 400)

class mytriangleapp(App):
   triangle = ObjectProperty(None)
   title = "Drawing app"

   def updating(self, *args):
      self.triangle.points[3] = 400
      self.triangle.points = self.triangle.points

   def build(self):
      box = BoxLayout(orientation='vertical')
      self.w = Widget()
      with self.w.canvas:
         Color(1, 1, 1, 1)
         self.triangle = Triangle(points=[100, 100, 300, 300, 500, 100])
      self.b1 = Button(
         text='update', on_press=self.updating,
         size_hint=(None, .1)
      )
      box.add_widget(self.w)
      box.add_widget(self.b1)
      return box
mytriangleapp().run()

输出

当执行上面的程序时,我们看到一个三角形和一个按钮。 单击该按钮时,"triangle.points"列表将更新,同时也会更新三角形绘图。

Kivy 绘图更新