【问题标题】:Kivy KivyMD - How to use multithreading to fill up different MDgridLayouts within MDTabsKivy KivyMD - 如何使用多线程填充 MDTabs 中的不同 MDgridLayouts
【发布时间】:2020-12-09 16:10:43
【问题描述】:

Python 3.6.4 - Kivy 1.11.1 - KivyMD 0.104.1

我对 Kivy 和 kivyMD 还很陌生,对线程和共享资源更是陌生。

今天,我用 SmartTileWithLabels 依次填写了 3 个 MDGridlayouts(sbgridfamily、sbgridgender、sbgridspecies)。它工作正常,但是加载时间很长(约 5 秒)。

为了优化这个加载,我试过了

  1. 将负载拆分到不同的线程中,而不使用锁或 信号量,一些单元格最终为空。

  2. 从结构中删除 MDGridlayouts 并在其上创建它们 飞入一个线程,然后将第一个图块添加到 一个 MDGrid 布局。

    _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

【问题讨论】:

  • 请提供minimal reproducible example。具体来说就是多线程代码。
  • 您好 John,我理解您的要求,但是我无法提供不再存在的代码。它没有按预期工作,我将其删除以恢复到以前的版本。为了重现性,我必须提供从 sqlite 数据库中提取的数据集和使用的照片。我作为业余爱好者(爱好)开发的应用程序需要做很多工作。感谢您花时间阅读我的问题。

标签: multithreading kivy kivymd


【解决方案1】:

Python 3.6.4 - Kivy 1.11.1 - KivyMD 0.104.1

我的问题是大约 300 个缩略图的创建和加载时间以及动态调整图像大小(如果它们从缓存中丢失)。

为了在不使用线程的情况下进行优化,我将重定向我的下一个开发,在启动应用程序时使用 Clock.schedule_once 为每个选项卡(50 个缩略图)加载画廊至少一页,然后根据需要逐页加载,使用on_scroll_start 和 on_scroll_move 滚动视图事件。

经过快速尝试,使用这种方法,第一次屏幕在不到一秒的时间内出现,然后立即显示。

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多