Kivy - 画布应力
在本章中,我们将了解图形引擎的效率。这可以通过向 Kivy 对象的画布添加大量图形指令来实现。
下面给出的程序测量图形引擎在随机位置和随机选择的颜色值绘制一万个矩形所需的时间。因此,它将评估画布可以承受多大的压力。
语法
使用以下语法在任何 Kivy 小部件的画布上绘制矩形指令 −
with self.root.canvas: Color(r,g,b,a) Rectangle(pos, size)
我们将为矩形生成 RGB 以及 x 和 y 坐标的随机值,并显示 10,000 个矩形。所用时间由 perf_counter() 函数计算。
t1=perf_counter() with self.root.canvas: for i in range(10000): Color(r,g,b,a) Rectangle(pos, size) t2=perf_counter()
绘制所需的时间为"t2 - t1"。它将显示在 Kivy 应用窗口的标题栏上。
示例
完整程序如下 −
from kivy.app import App from kivy.graphics import * from kivy.uix.floatlayout import FloatLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.button import Button from random import random as r from time import perf_counter from kivy.core.window import Window Window.size = (720, 400) class StresstestApp(App): def add_rects(self, *args): self.t1 = perf_counter() with self.root.canvas: for i in range(10000): Color(r(), 1, 1, mode='hsv') Rectangle( pos=(r() * self.root.width + self.root.x, r() * self.root.height + self.root.y), size=(20, 20) ) self.t2 = perf_counter() self.title = str(self.t2 - self.t1) + "Sec. to draw 10000 rectangles" def build(self): main = GridLayout(cols=1) self.root = FloatLayout(size=(Window.width, 100)) self.btn1 = Button( text='start', size_hint=(1, None), pos_hint={'center_x': .5, 'center_y': .1} ) self.btn1.bind(on_press=self.add_rects) self.root.add_widget(self.btn1) main.add_widget(self.root) return main StresstestApp().run()
输出
运行程序并单击"启动"按钮。
您将得到如下图所示标题栏上显示的拍摄时间−