我在树莓派3上使用kivy 1.10.1和python 3.4.2,并且带有一些按钮和标签的GUI正常工作。现在,我想每秒更新一次GUI以显示一些新数据(更新时钟,从数据库中获取一些值,等等)
问题:
当我启动计时器时,GUI变得非常慢。我测试了代码的一些修改,例如禁用了数据读取,但没有任何效果。每次调用计时器时,GUI都会滞后几毫秒。
有人知道这是什么原因吗?我确信树莓派的硬件不是问题所在,因为当我使用kivy示例(例如带有一些3D渲染)时,一切都正常运行而没有滞后。
详细信息:
import requests
from bs4 import BeautifulSoup,Comment
page = requests.get(url)
SA = 0
soup = BeautifulSoup(page.text, 'html.parser')
result=soup.find_all('input')
tags = []
for x in result:
tags.extend(str(x))
strings = []
i=0
sentence = ''.join(tags)
if 'search' in sentence:
print('there is a search bar')
else
print('there is no search bar')
代码段:
[INFO ] [Kivy ] v1.10.1
[INFO ] [Python ] v3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1]
[INFO ] [Factory ] 194 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO ] [Window ] Provider: egl_rpi
[INFO ] [GL ] Using the "OpenGL ES 2" graphics system
[INFO ] [GL ] Backend used <gl>
[INFO ] [GL ] OpenGL version <b'OpenGL ES 2.0'>
[INFO ] [GL ] OpenGL vendor <b'Broadcom'>
[INFO ] [GL ] OpenGL renderer <b'VideoCore IV HW'>
[INFO ] [GL ] OpenGL parsed version: 2, 0
[INFO ] [GL ] Shading version <b'OpenGL ES GLSL ES 1.00'>
[INFO ] [GL ] Texture max size <2048>
[INFO ] [GL ] Texture max units <8>
[INFO ] [Window ] virtual keyboard allowed, multiuser mode, not docked
[INFO ] [Text ] Provider: sdl2
[INFO ] [KivyMD ] KivyMD version: 0.1.2
我已经从此页面https://kivy.org/doc/stable/guide/events.html上阅读了信息,但这对我没有帮助。
最诚挚的问候!
答案 0 :(得分:0)
我找到了解决方案。如果只是使用“ schedule_interval(...)”更新GUI元素,一切工作正常。如果我尝试通过“ schedule_interval(...)”获取测量值,则会出现延迟。我使用以下方法将获取值更改为单独的线程:
# Get measured values in a separated thread)
def thread_timer_values(self):
while True:
self.get_measured_vales()
time.sleep(2)
现在我可以在GUI中显示测量值而不会出现滞后了!