質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

850閲覧

kivyのRecycleViewにおいてページ分割する方法

ulthar

総合スコア8

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/06/22 05:36

python3、Kivyを用いてアプリを作成しています。
RecycleViewを用いてファイルのリストを表示しようと考えているのですが、ファイルの数が多い点、viewclassにサムネイルとして画像を持たせている点が原因で非常に重いアプリになってしまっています。
この点を解決するために、RecycleViewをページで分割して表示できれば非常に嬉しいのですが可能でしょうか?

単純に考えてRecycleViewのdataとは別に辞書型リストを作成しておいて表示分だけその都度dataに入れることでも達成できるかとは思いますが、ファイルのソート機能なども考えており、できればdataからダイレクトに表示範囲を指定できるようにしたいです。

RecycleViewの簡単なテストコードを以下に示します。

py

1from kivy.app import App 2from kivy.uix.boxlayout import BoxLayout 3from kivy.properties import ObjectProperty 4 5class TestRun(App): 6 def __init__(self, **kwargs): 7 super(TestRun,self).__init__(**kwargs) 8 9class TestRV(BoxLayout): 10 rv=ObjectProperty() 11 def on_kv_post(self, base_widget): 12 for i in range(20): 13 self.rv.data.append({"name":str(i)}) 14class RVLabel(BoxLayout): 15 name=ObjectProperty() 16 17TestRun().run()

kv

1TestRV 2<TestRV> 3 rv:rv 4 BoxLayout: 5 orientation: "vertical" 6 RecycleView: 7 id:rv 8 viewclass:"RVLabel" 9 RecycleBoxLayout: 10 default_size: None, dp(56) 11 default_size_hint: 1, None 12 size_hint_y: None 13 height: self.minimum_height 14 orientation: 'vertical' 15 16<RVLabel> 17 name:"" 18 Label: 19 text: root.name

例えば以上のコードにおいて09を表示するページと1019を表示するページと分割し、Buttonなどからページ移動ができるような方法があればご教授いただきたいです。
またページ分割に限らず、大量のRecycleViewの表示を軽くできるようなエレガントな方法があればお教えいただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ページ分割に関してはその通りで

RecycleViewのdataとは別に辞書型リストを作成しておいて表示分だけその都度dataに入れる

しかないと思います。ただ重い原因がデータの件数であるかは実際のcodeを見てみないと分からないですが。とりあえず今見えているcodeで気になる点は

python

1 for i in range(20): 2 self.rv.data.append({"name":str(i)})

で、これをself.rv.data.extend({"name":str(i)} for i in range(20))のようにしてrv.dataを触る回数を減らしてみるとどうなりますか?

投稿2021/06/23 12:41

編集2021/06/24 00:16
gottadiveintopy

総合スコア736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ulthar

2021/06/24 01:33

まず、回答ありがとうございます。 ページ分割についてはやはり無理やり自分で作るしか仕方なさそうですね。 ソフトの重さですが自己解決いたしまして、 Pillowなどを用いてひとつずつ変換をかけていたのが問題でした。 1度サムネイルファイルに保存して、sourceにパスを渡す方法に切り替えたところ問題なく動くようになりました。 初歩的な部分で申し訳ありません。 提案していただいた方法、よく見たことがありましたが、forで.dateに触る回数が減らせるのが利点だったのですね。勉強になります。 ありがとうございました。
guest

0

コメントと間違えました

投稿2021/06/24 01:32

編集2021/06/24 01:35
ulthar

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問