如何解决Kivy KivyMD-如何使用多线程填充MDTab中的不同MDgridLayouts
Python 3.6.4-Kivy 1.11.1-KivyMD 0.104.1
我对Kivy和kivyMD还是比较陌生,甚至在线程和共享资源方面都更加了解。
今天,我依次用SmartTileWithLabels填写3个MDGridlayouts(sbgridfamily,sbgridgender,sbgridspecies)。它可以正常工作,但是加载时间却很长(〜5秒)。
为优化此负载,我尝试了
-
可以将负载分为不同的线程,而无需使用锁或锁 信号量,一些细胞最终变成空的。
-
从结构中删除MDGridlayouts并在其上创建它们 在一个线程中运行,然后在将第一个图块添加到后立即收到断言错误 MDGridlayout。
_apply_rule assert(rule not in self.rulectx) AssertionError
那么并行构建MDGridlayouts的最佳方法是什么?
该屏幕具有以下结构:
<Screen>
BoxLayout:
orientation:'vertical'
MDToolbar:
title: 'Titre'
...
MDTabs:
Tab:
text: "Famille"
ScrollView:
id: sbgfscrollview
do_scroll_x: False
MDGridLayout:
id: sbgridfamily
...
Tab:
text: "Genre"
ScrollView:
do_scroll_x: False
MDGridLayout:
id: sbgridgender
cols: 3
...
Tab:
text: "Esp\u00E8ce"
ScrollView:
do_scroll_x: False
MDGridLayout:
id: sbgridspecies
cols: 4
...
# Will always be at the bottom of the screen.
BottomAppBar:
Screen with first tab and gridlayout
解决方法
Python 3.6.4-Kivy 1.11.1-KivyMD 0.104.1
我的问题是,如果缓存中缺少缩略图,则会创建和加载约300张缩略图,并实时调整图像大小。
为了在不使用线程的情况下进行优化,我将在启动应用程序时使用Clock.schedule_once将我的下一个开发重定向到为每个选项卡(至少50个缩略图)至少加载一页页面,然后按需使用on_scroll_start和on_scroll_move滚动视图事件。
使用此方法快速尝试后,屏幕第一次出现不到一秒钟,然后立即显示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。