Как сделать галерею в kivy?

Я хочу эту галерею в киви как сделать вид галереи Как добавить этот киви тогда показывает много дисплеев и каруселей в галерее? Как создать изображение и отобразить его на следующей странице Кто-нибудь может помочь?

class Gallery(Screen):
        pass 

.kv

<MyTile@SmartTile>:
        size_hint_y: None
        height: "240dp"
    
<Gallery>
    ScrollView:
        MDGridLayout:
            cols: 3
            row_default_height: (self.width - self.cols*self.spacing[0]) / self.cols
            row_force_default: True
            adaptive_height: True
            padding: dp(4), dp(4)
            spacing: dp(4)
            MyTile:
                source:'*.jpg'

https://i.stack.imgur.com/loupw.png

Вот беда..

[ WARN:1] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-vi271kac\opencv\modules\videoio\src\cap_msmf.cpp (376) `anonymous-namespace'::SourceReaderCB::OnReadSample videoio(MSMF): OnReadSample() is called with error status: -1072873821
[ WARN:1] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-vi271kac\opencv\modules\videoio\src\cap_msmf.cpp (388) `anonymous-namespace'::SourceReaderCB::OnReadSample videoio(MSMF): async ReadSample() call is failed with error status: -1072873821
[INFO   ] [Loader      ] using a thread pool of 2 workers
[ERROR  ] [AsyncImage  ] Not found <*.jpg>
[INFO   ] [Base        ] Start application main loop
[ WARN:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-vi271kac\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback

Вот галерея, но здесь нет изображения. Кто-нибудь может сказать этот код, в чем проблема в кодах?


person Peacock    schedule 17.06.2021    source источник
comment
Попробуйте что-нибудь вроде это   -  person Neizvestnyj    schedule 20.06.2021
comment
Большое спасибо @Neizvestnyj, мне это нужно, но помимо этого мне нужно сделать галерею. например, много gridlayout в галерее.   -  person Peacock    schedule 21.06.2021
comment
Я пытаюсь использовать (kivymd.readthedocs.io/en/latest/components/ image-list), но не показывает ни одной картинки в моей галерее.   -  person Peacock    schedule 21.06.2021
comment
Разместите свой код.   -  person Neizvestnyj    schedule 21.06.2021
comment
@Neizvestnyj, где я могу писать здесь? Отвечать?   -  person Peacock    schedule 21.06.2021
comment
В вопросе и опишите, что вам нужно   -  person Neizvestnyj    schedule 21.06.2021
comment
@Neizvestnyj Смотрите в моем вопросе   -  person Peacock    schedule 21.06.2021
comment
Можете ли вы опубликовать работающий пример   -  person Neizvestnyj    schedule 21.06.2021
comment
Нет! Это пусто! Без проблем! я публикую   -  person Peacock    schedule 21.06.2021
comment
Просто проще понять, чего конкретно вы хотите, если программист, отвечающий на ваш вопрос, посмотрит на ваши попытки решить эту задачу. Вы хотите написать полноценное приложение для вас в вашем вопросе.   -  person Neizvestnyj    schedule 21.06.2021
comment
@Neizvestnyj смотрите в моем вопросе. Я разместил все вопросы здесь.   -  person Peacock    schedule 21.06.2021
comment
@Neizvestnyj подскажите как решить в моем вопросе?   -  person Peacock    schedule 22.06.2021
comment
Прикрепите пример, который я могу запустить (со всем импортом, как и ожидалось), и узнайте, в чем ошибка   -  person Neizvestnyj    schedule 22.06.2021
comment
Основная проблема заключается в моем заголовке в исходнике и может видеть ошибку в асинхронном изображении.   -  person Peacock    schedule 23.06.2021
comment
В вашей ошибке все четко написано, указанного вами изображения не существует   -  person Neizvestnyj    schedule 23.06.2021
comment
Да! В чем проблема в этом коде только для изображения. Мне нужна одна папка в галерее так как сделать все?   -  person Peacock    schedule 23.06.2021
comment
В вашем принтере все правильно, для своего проекта делал примерно так же, указывайте путь явно. Добавляйте изображения в макет в цикле   -  person Neizvestnyj    schedule 23.06.2021
comment
@Neizvestnyj Я пытался это сделать (stackoverflow. com/questions/64643313/), так что это работает, тогда я пытаюсь использовать путь MyTile: source: r"C:\Users", он тоже работает, но в нем нет изображения, поэтому я хочу добавить источник в MyTitle, так как сделай это?   -  person Peacock    schedule 24.06.2021
comment
Скажи мне всем! Как все это кодируется?   -  person Peacock    schedule 02.07.2021


Ответы (1)


Я набросал пример галереи, я думаю, это то, что вы хотите.

from kivymd.app import MDApp

from kivy.metrics import dp
from kivy.lang.builder import Builder
from kivy.uix.boxlayout import BoxLayout

import os

KV = """
<ImageButton@ButtonBehavior+FitImage>

<ImageManager>
    path: ""
    orientation: "vertical"
    size_hint_y: None
    height: root.height
    padding: dp(10)

    ImageButton:
        source: root.path
        
BoxLayout:
    RecycleView:
        id: rv
        key_viewclass: "viewclass"
        RecycleGridLayout:
            padding: dp(2)
            cols: 3
            default_size: None, dp(48)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
"""


class ImageManager(BoxLayout):
    pass


class GalleryApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.manager_list = []
        self.dir = os.getcwd()
        self.available_image_format = ['.png', '.jpg', '.jpeg', '.bmp']  # etc

    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        self.load_images()

    def load_images(self):
        if not self.manager_list:
            for image in os.listdir(self.dir):
                target_filename, target_file_extension = os.path.splitext(image)
                if target_file_extension in self.available_image_format:
                    path_to_image = os.path.join(self.dir, image)
                    self.manager_list.append(
                        {
                            "viewclass": "ImageManager",
                            "path": path_to_image,
                            "height": dp(200),
                        }
                    )
            self.root.ids.rv.data = self.manager_list


GalleryApp().run()
person Neizvestnyj    schedule 02.07.2021
comment
Большое спасибо! Он работает, но не ищет изображения в этой галерее. - person Peacock; 05.07.2021
comment
Это логично, изображения должны быть там же, где и скрипт (в моем примере это так), можно указать нужный вам путь с помощью аргумента self.dir. - person Neizvestnyj; 05.07.2021
comment
Я хочу использовать «из kivy.properties import StringProperty» в этой галерее, так как это сделать? - person Peacock; 05.07.2021
comment
Если я вас правильно понял, просто импортируйте вверху, а потом в самом классе создайте нужные вам аргументы: class Test: value = StringProperty() - person Neizvestnyj; 05.07.2021
comment
Большое спасибо! Я хочу это. Но небольшая проблема в этой галерее, потому что мне нужна выбранная кнопка в этой галерее [kivymd.readthedocs.io/en/latest/components/selection/]] так как же? - person Peacock; 07.07.2021
comment
просто поместите его в ImageManager это же нормально BoxLayout - person Neizvestnyj; 07.07.2021
comment
Внимательно читайте документацию и смотрите примеры, вы хотите поставить картинку в список класса, это невозможно. Так же советую изучить сам python - person Neizvestnyj; 08.07.2021
comment
Я попробую. и спасибо за помощь в моем проекте. :) - person Peacock; 08.07.2021