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()

Output

运行程序,然后单击“开始”按钮。

kivy canvas stress

您将看到标题栏上显示的用时,如下图所示 −

kivy canvas stress title bar