2

Python 3.6.4 - Kivy 1.11.1 - KivyMD 0.104.1

私は Kivy と kivyMD についてはかなり新しいものであり、スレッド化と共有リソースについてはさらに詳しく知っています。

今日は、3 つの MDGridlayout (sbgridfamily、sbgridgender、sbgridspecies) に SmartTileWithLabels を順番に入力します。正常に動作しますが、ロード時間がかなり長い (~5 秒)。

この読み込みを最適化するために、試しました

  1. ロックやセマフォを使用せずに負荷を異なるスレッドに分割すると、一部のセルが空になります。

  2. MDGridlayout を構造から削除して 1 つのスレッドでオンザフライで作成すると、最初のタイルを 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:

最初のタブとグリッドレイアウトを含む画面

4

1 に答える 1

1

Python 3.6.4 - Kivy 1.11.1 - KivyMD 0.104.1

私の問題は、画像がキャッシュにない場合、その場で画像のサイズを変更する約 300 のサムネイルの作成と読み込みに時間がかかることでした。

スレッドを使用せずに最適化するために、アプリケーションの起動時に Clock.schedule_once を使用してタブごとに少なくとも 1 ページ (50 個のサムネイル) ギャラリーをロードするように次の開発をリダイレクトし、on_scroll_start と on_scroll_move を使用してオンデマンドでページごとにリダイレクトしますスクロールビュー イベント。

このアプローチでは、簡単に試してみると、最初は 1 秒もかからずに画面が表示され、その後はすぐに表示されます。

于 2020-08-21T16:58:43.247 に答える