目录
画布¶
Canvas 是用于 Widget 绘制的根对象。有关 Canvas 使用的更多信息,请参阅类文档。
- class kivy.graphics.instructions.Callback(callback=None, **kwargs)¶
基类:
Instruction回调(Callback)是一种指令,在执行绘图操作时会被调用。向画布(canvas)添加指令时,你可以这样做:
with self.canvas: Color(1, 1, 1) Rectangle(pos=self.pos, size=self.size) Callback(self.my_callback)
回调函数的定义必须为:
def my_callback(self, instr): print('I have been called!')
警告
请注意,如果您频繁或高成本地调用回调函数,可能会显著降低渲染性能。
画布的更新不会在发生新事件之前自动进行。在你的回调函数中,你可以请求更新:
with self.canvas: self.cb = Callback(self.my_callback) # then later in the code self.cb.ask_update()
如果你使用Callback类调用其他工具包的渲染方法,将会遇到OpenGL上下文的问题。其他工具包可能已经修改了OpenGL状态,一旦程序流程返回到Kivy,它就会崩溃。可能会出现故障、崩溃、黑洞等问题。为避免这种情况,你可以激活:attr:`reset_context`选项。它会在调用你的回调后重置OpenGL上下文状态,以确保Kivy的渲染正确。
警告
reset_context并非完整的 OpenGL 重置。如果您遇到相关问题,请联系我们。- ask_update(self)¶
通知父画布,我们希望在下一帧更新它。当您因某些值发生变化而需要触发重绘时,这非常有用。
在 1.0.4 版本加入.
- callback¶
用于获取/设置函数的属性。
- reset_context¶
如果你希望在回调执行后重置Kivy的OpenGL上下文,请将此设置为True。
- class kivy.graphics.instructions.Canvas(**kwargs)¶
基类:
CanvasBase您希望用于绘制的指令。
备注
Canvas 支持 Python 的
with语句及其进入与退出语义。不使用``with``语句使用画布的示例:
self.canvas.add(Color(1., 1., 0)) self.canvas.add(Rectangle(size=(50, 50)))
使用Python的``with``语句来操作画布(canvas)的用法如下:
with self.canvas: Color(1., 1., 0) Rectangle(size=(50, 50))
- add(self, Instruction c)¶
将
Instruction追加到我们的列表中。如果画布包含 after 组,则该指令会插入到 after 组之前,而 after 组仍保持在最后。这与insert()的工作方式不同,后者可以在任意位置插入。
- after¶
用于获取“after”组的属性。
- ask_update(self)¶
通知画布,我们希望它在下一帧进行更新。当您因某些值发生变化而需要触发重绘时,这非常有用。
- before¶
用于获取“before”组的属性。
- clear(self)¶
清除画布中的所有
Instruction,使其保持干净。
- draw(self)¶
将指令应用于我们的窗口。
- opacity¶
用于获取/设置画布不透明度的属性。
在 1.4.1 版本加入.
opacity 属性控制画布及其子元素的透明度。请注意,这是一个累积属性:该值会与当前全局透明度相乘,并将结果应用于当前上下文颜色。
例如:如果父级的不透明度为0.5,而子级的不透明度为0.2,那么子级的实际不透明度将是0.5 * 0.2 = 0.1。
然后,不透明度在着色器中应用如下:
frag_color = color * vec4(1.0, 1.0, 1.0, opacity);
- remove(self, Instruction c)¶
- class kivy.graphics.instructions.ContextInstruction(**kwargs)¶
基类:
Instruction这些指令没有直接的视觉表现,而是修改当前画布的状态,例如纹理绑定、设置颜色参数、矩阵操作等。
- class kivy.graphics.instructions.Instruction(**kwargs)¶
-
仅供使用,请勿直接使用。
- flag_data_update(self)¶
- flag_update(self, int do_parent=1)¶
- group¶
group: unicode
- proxy_ref¶
返回对指令的代理引用,即不创建该控件的引用。更多信息请参阅 weakref.proxy。
在 1.7.2 版本加入.
- class kivy.graphics.instructions.InstructionGroup(**kwargs)¶
基类:
Instruction图形指令。可直接按如下方式使用:
blue = InstructionGroup() blue.add(Color(0, 0, 1, 0.2)) blue.add(Rectangle(pos=self.pos, size=(100, 100)))
green = InstructionGroup() green.add(Color(0, 1, 0, 0.4)) green.add(Rectangle(pos=(100, 100), size=(100, 100)))
# 此处,self 应为 Widget 或其子类 [self.canvas.add(group) for group in [blue, green]]
- add(self, Instruction c)¶
在我们的列表中添加一个新的
Instruction。
- children¶
children: list
- clear(self)¶
移除所有
Instructions。
- get_group(self, unicode groupname)¶
返回一个可迭代对象,用于获取所有具有特定组名的
Instructions。
- indexof(self, Instruction c)¶
- insert(self, int index, Instruction c)¶
在索引位置向我们的列表插入一个新的
Instruction。
- length(self)¶
- remove(self, Instruction c)¶
从我们的列表中移除一个现有的
Instruction。
- remove_group(self, unicode groupname)¶
移除所有具有特定组名的
Instructions。
- class kivy.graphics.instructions.RenderContext(*args, **kwargs)¶
基类:
Canvas顶点着色器
片段着色器
默认纹理
状态栈(颜色、纹理、矩阵...)
- shader¶
返回与渲染上下文关联的着色器。
- use_parent_frag_modelview¶
如果为 True,将使用父片段模型视图矩阵。
在 1.10.1 版本加入: rc = RenderContext(use_parent_frag_modelview=True)
- use_parent_modelview¶
如果为 True,将使用父级模型视图矩阵。
在 1.7.0 版本加入.
Before:
rc['modelview_mat'] = Window.render_context['modelview_mat']
现在:
rc = RenderContext(use_parent_modelview=True)
- use_parent_projection¶
如果为 True,则将使用父级投影矩阵。
在 1.7.0 版本加入.
Before:
rc['projection_mat'] = Window.render_context['projection_mat']
现在:
rc = RenderContext(use_parent_projection=True)
- class kivy.graphics.instructions.VertexInstruction(**kwargs)¶
基类:
Instruction在画布上具有直接视觉表示的图形,如矩形、三角形、线条、椭圆等。
- source¶
此属性表示要加载纹理的文件名。如果你想使用图像作为源,可以这样做::
with self.canvas: Rectangle(source='mylogo.png', pos=self.pos, size=self.size)
以下是Kivy语言中的等效写法:
<MyWidget>: canvas: Rectangle: source: 'mylogo.png' pos: self.pos size: self.size
备注
将使用
kivy.resources.resource_find()函数来搜索该文件名。
- tex_coords¶
该属性表示用于绘制顶点指令的纹理坐标。该值必须是一个包含8个值的列表。
纹理坐标包含位置 (u, v) 和大小 (w, h)。大小可以为负值,表示“翻转”的纹理。默认情况下,tex_coords 为:
[u, v, u + w, v, u + w, v + h, u, v + h]
如果你想实现炫酷的效果,可以传入自定义的纹理坐标。
警告
刚才提到的默认值可以是负数。根据图像和标签提供者的不同,由于图像内部存储的顺序,坐标会在垂直方向上翻转。为了更快,我们不是翻转图像数据,而是直接翻转纹理坐标。