Kivy 简明教程
Kivy - Line
在 Kivy 库中,“Line”是“kivy.graphics”模块中一个重要的顶点指令。在 Kivy 中,所有绘制都在与任何可用小部件关联的 Canvas 上完成。Line 指令绘制一条线,或一系列线条以及其他形状,如矩形、椭圆、贝塞尔曲线等。
必须注意的是,Kivy 绘制指令并不自动相对于小部件的位置或大小。相反,所有小部件的 Canvas 共享一个公共坐标空间。
Line 函数需要一个数字值列表。数字的解释取决于分配此列表的参数。List 函数的参数是点、矩形、椭圆、贝塞尔曲线等。
Draw a Rectangle
Syntax
您可以使用 Line 函数绘制矩形,语法如下 −
with self.canvas:
Line(rectangle=[x, y, w, h], width)
这里,“x”和“y”表示矩形的左下位置,“w”和“h”表示宽度和高度。该线条会自动闭合。
您还可以使用 rounded_rectangle 属性绘制圆角矩形。参数必须是以下某个形式的元组 −
-
(x, y, width, height, corner_radius)
-
(x, y, width, height, corner_radius, resolution)
-
(x, y, width, height, corner_radius1, corner_radius2, corner_radius3, corner_radius4)
-
(x, y, width, height, corner_radius1, corner_radius2, corner_radius3, corner_radius4, resolution)
Example
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.core.window import Window
Window.size = (720,300)
class drawRectangle(App):
def build(self):
widget = Widget()
with widget.canvas:
Color(1, 0, 1, 1)
Line(
rectangle=(50, 50, 300, 200),
width=3
)
Line(rounded_rectangle=(500, 200, 300, 200, 20, 20, 20, 20))
return widget
drawRectangle().run()
Draw an Ellipse
您需要将数字值列表分配给 Line 指令的 ellipse 属性。ellipse 参数的值必须是
(x, y, width, height, angle_start, angle_end, segments)
其中,
-
“x”和“y”表示椭圆的左下角
-
“width”和“height”表示椭圆的大小。如果这两个值相同,结果将是一个圆形
-
“angle_start”和“angle_end”采用度数表示。默认值为 0 和 360。
-
“segments”是椭圆的精度。您可以使用此属性创建具有 3 条或更多边的多边形。小于 3 的值不会被表示出来。
Example
在下面的代码中,Line 指令用于绘制具有不同参数的椭圆−
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.core.window import Window
Window.size = (720,400)
class drawEllipse(App):
def build(self):
widget = Widget()
with widget.canvas:
Color(0.5, .2, 0.4, 1)
Line(ellipse=(500, 70, 200, 200), width=4)
Line(ellipse=(100, 200, 100, 200), width=4)
Color(.2, .8, 0, 1)
Line(ellipse=(200, 100, 200, 100), width=4)
Line(ellipse=(500, 300, 250, 90, 45, 270), width=3)
Color(.1, .8, .3, 1)
Line(ellipse=(200, 400, 200, 80, 180, 420, 30), width=5)
return widget
drawEllipse().run()
Draw Bezier Curve
贝塞尔曲线由一些控制点加权,我们将其添加到指令中。Line() 函数接受贝塞尔参数,向该参数传递 (x,y) 坐标对的列表。参数必须是 2n 个元素的列表,“n”为点的数量。
with self.canvas:
Line(bezier=[x1, y1, x2, y2, x5, y3], width)
需要注意的是,Line 指令函数的 points 参数也接收一组类似的 2n 个元素。points 属性在连续点之间绘制一条线。
with self.canvas:
Line(points=[x1, y1, x2, y2, x5, y3], width)
Line 指令的 point 参数仅绘制与每个 x-y 坐标对对应的点,而不连接任何线。
with self.canvas:
Line(point=[x1, y1, x2, y2, x5, y3], width)
Example
以下代码使用同一组“x”和坐标对仅绘制点、线和贝塞尔线 −
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.core.window import Window
Window.size = (720, 400)
class drawBezier(App):
def build(self):
widget = Widget()
with widget.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=5
)
Color(.1, .1, .8)
Line(
points=[700, 400, 450, 300, 300, 350, 350, 200, 200, 100, 150, 10],
pointsize=3
)
return widget
drawBezier().run()