КИВИ: Как пользоваться Каруселью? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующий пример:

'''
Carousel example with button inside.
This is a tiny test for testing the scroll distance/timeout
And ensure the down/up are dispatched if no gesture is done.
'''
from kivy.uix.carousel import Carousel
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.lang import Builder

Builder.load_string('''
<Page>:
    cols: 3
    Label:
        text: str(id(root))
    Button
    Button
    Button
    Button
        text: 'load(page 3)'
        on_release:
            carousel = root.parent.parent
            carousel.load_slide(carousel.slides[2])
    Button
    Button
        text: 'prev'
        on_release:
            root.parent.parent.load_previous()

    Button
        text: 'next'
        on_release:
            root.parent.parent.load_next()
            print(root.parent.parent)
''')


class Page(GridLayout):
    pass


class TestApp(App):
    def build(self):
        root = Carousel()
        for x in range(10):
            root.add_widget(Page())
        return root


if __name__ == '__main__':
    TestApp().run()

, и я использую sh, чтобы использовать карусель в моей программе. Проблема в том, что я не могу понять, как это работает. Я понимаю, что он создает 10 виджетов, как определено в классе, но я два дня пытался реализовать это в своем коде, но, похоже, я не могу его вернуть. Мне удается только один экземпляр, и когда я пытаюсь прокрутить, ничего не происходит, когда он должен менять слайды. Я не могу опубликовать свой код, потому что он состоит из нескольких файлов. Мне нужен пример, если возможно, который имеет следующую структуру в KV.

<MainLayout>
 RecycleView:
  BoxLayout:
   *insert carousel here*

Я заставил его работать, используя непосредственно следующий код kv

Carousel:
direction: 'right'
AsyncImage:
    source: 'http://placehold.it/480x270.png&text=slide-1.png'
AsyncImage:
    source: 'http://placehold.it/480x270.png&text=slide-2.png'

, и он работает, но я не могу вручную писать все исходники каждый раз ... Следовательно, код python должен делать это с помощью for l oop. Может ли кто-нибудь предоставить мне пример, который возвращает MainLayout, который является экраном или чем-то еще, а не самой каруселью? Я хочу, чтобы карусель была создана в python, а затем вызывалась в kivy. Мне кажется, решение довольно простое, но по какой-то причине я не могу осмыслить его.

...