使用计时器后Kivy gui滞留在树莓上

时间:2019-04-05 16:17:19

标签: python-3.x kivy raspberry-pi3

我在树莓派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上阅读了信息,但这对我没有帮助。

最诚挚的问候!

1 个答案:

答案 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中显示测量值而不会出现滞后了!