我有这样的申请
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窗口的大小。而且我没有看到任何滞后。