Kivy 简明教程
Kivy - Canvas Stress
在本章中,我们将找出图形引擎的效率。可以通过向 Kivy 对象的画布添加大量图形指令来完成此操作。
下面给出的程序测量图形引擎绘制一万个矩形所需的时间,这些矩形的位置和颜色值是随机选择的。因此,它将评估画布可以承受多少压力。
Syntax
矩形指令使用以下语法在任何 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 应用程序窗口的标题栏中。
Example
完整程序如下 −
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()