Kivy:增加窗口大小时,动画会使应用变慢

时间:2018-08-23 22:20:26

标签: python kivy

我有这样的申请

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.utils import interpolate
from time import time

root = Builder.load_string('''
#: import Window kivy.core.window.Window

Button
    size_hint:(None,None)
    on_press: print Window.size
''')

class TestApp(App):
    def build(self):
        return root

    def on_start(self):
        self.starttime = time()
        Clock.schedule_interval(self.update, 0)

    def update(self, *args):
        t = time() - self.starttime
        ft = 1 - abs(t % 2 - 1)
        color = interpolate((1, 0, 0, 1), (0, 0, 1, 1), 1. / ft)
        self.root.background_color = color


if __name__ == '__main__':
    TestApp().run()

我手动将窗口大小增加到8000x900像素(我的显示器分辨率为1920x1080),我注意到应用程序出现了滞后。 例如,当我更改应用程序窗口的位置或大小时,我会看到这些滞后。 此外,动画fps降低了,它可以与抽搐一起使用(不平稳)。

但是,如果我关闭动画(例如,注释掉Clock.schedule_interval行(self.update,0)), 那么即使窗口很大,我也看不到这些滞后。

似乎动画由于某种原因与应用程序窗口的所有像素交互。

这很奇怪,因为带有动画的小部件的大小确实保持不变(在我的情况下始终为100x100)。

在使用效果小部件时,这会更明显。 这是示例代码:

from kivy.app import App
from kivy.uix.effectwidget import EffectWidget, EffectBase
from kivy.lang import Builder

GLSL_CODE = r'''

vec4 effect(vec4 color, sampler2D texture, vec2 tex_coords, vec2 coords)
{
  vec3 col = vec3(1.,0.,sin(time));
  return color*vec4(col,1.);
}
'''


KV = '''
EffectWidget:
    size_hint: (None,None)
    effects: [app.effect]
    Image
        source: 'circle.png'    

'''


class MyApp(App):
    def build(self):
        self.effect = EffectBase(glsl=GLSL_CODE)
        return Builder.load_string(KV)


if __name__ == '__main__':
    MyApp().run()

似乎窗口大小越大,应用程序的速度就越慢。 但为什么? 而我该如何摆脱呢?

我首先想到的是,我的系统(Ubuntu)可能有问题,但是在这种情况下,其他非灵活应用程序仍可以正常工作。 例如,我启动了Chrome浏览器,在YouTube上打开了一个视频,然后开始增加Chrome窗口的大小。而且我没有看到任何滞后。

0 个答案:

没有答案