章节知识点总揽
Kivy中的每一个小部件、布局中都有canvas、canvas和canvas.after属性,我们可以将canvas看作在坐标空间中一个无限的绘图板,通过向canvas中添加绘图指令来绘制想要的图形。Kivy的所有部件都共享同一个坐标空间,且不限于窗口或屏幕的大小。
3.3.1 认识canvas属性
在Kivy中的每个小部件以及布局中都包括了canvas属性。通过canvas属性,开发人员可以设置控件的背景以及显示的颜色,而且还可以通过在canvas中添加不同的Instructions指令来达到不同的页面效果。
使用画布的canvas属性
通过add(Instruction canvas)方法将一个canvas画布添加到布局中,首先需要引入Kivy.graphics.instructions包的InstructionGroup类,具体用法如下:
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.graphics import Rectangle,Color
from kivy.graphics.instructions import InstructionGroup
class RelativeWidget(RelativeLayout):
def __init__(self,**kwargs):
super().__init__(**kwargs)
blue = InstructionGroup()
blue.add(Color(0,0,1,0.2))
blue.add(Rectangle(pos=self.pos,size=(300,300)))
self.canvas.add(blue)
green = InstructionGroup()
green.add(Color(0,1,0,0.4))
green.add(Rectangle(pos=(300,300),size=(300,300)))
self.canvas.add(green)
class CanvasApp(App):
def build(self):
return RelativeWidget()
if __name__ == '__main__':
CanvasApp().run()
运行main.py,显示出刚刚添加的两个画布,结果如下图:
通常情况下,使用完canvas画布后,还需要使用clear()方法清除掉所有添加在画布中的Instructions指示类型,或者也可以使用Python的with语法,可将上面代码修改为下面所示:
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.graphics import Rectangle,Color
from kivy.graphics.instructions import InstructionGroup
class RelativeWidget(RelativeLayout):
def __init__(self,**kwargs):
super().__init__(**kwargs)
with self.canvas:
Color(0,0,1,0.2)
Rectangle(pos=self.pos,size=(300,300))
Color(0,1,0,0.4)
Rectangle(pos=(300,300),size=(300,300))
class CanvasApp(App):
def build(self):
return RelativeWidget()
if __name__ == '__main__':
CanvasApp().run()
运行main.py后结果与之前一致。
canvas常用的属性表
属性 | 说明 |
add(Instruction c) | 将INstruction类型的c添加到canvas中 |
clear() | 删除所有的Instructions |
get_group(str Groupname) | 返回特定组下的所有Instructions |
insert(int index,Instruction c) | 在指定位置插入 c |
indexof(Instruction c) | 返回c的下标 |
length() | 返回canvas的长度 |
remove(Instruction c) | 删除指定的c |
remove_group(str groupname) | 删除该组下的所有c |
上一篇:基本图形绘制——线和点
下一篇:基本图形绘制——canvas.before属性和canvas.after属性