Search code examples
pythoncarouselkivy

Kivy Event on carousel when slide change


I don't have any idea to find a solution of my problem.

I have make an application with Carousel Widget. In this Carousel I have 4 slides. welcomeSlide -> DVDSlide -> DVDPretSlide --> CategorySlide I have make a class for each slides.

I use a ListAdpter to display the data extracted from an Sqlite3 Database.

My pblem is about the refresh of the list, when I modify a DVD (add name to pret) in the DVDSlide, when I slide to the DVDPret, the DVD do not appears because the List is not refresh.

Like the doccumentation for the carousel I don't find the event when slide change. It will be the best if an event exist to get the current slide index.

Have you got any Idea ?

Thanks,


Solution

  • You can observe index property:

    from kivy.uix.carousel import Carousel
    from kivy.uix.boxlayout import BoxLayout
    from kivy.app import App
    from kivy.lang import Builder
    
    Builder.load_string('''
    <Page>:
        Label:
            text: str(id(root))
    
    <Carousel>
        on_index: print("slide #{}".format(args[1]))
    ''')
    
    class Page(BoxLayout):
        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()
    

    Or you can observe current_slide property:

    from kivy.uix.carousel import Carousel
    from kivy.uix.boxlayout import BoxLayout
    from kivy.app import App
    from kivy.lang import Builder
    
    Builder.load_string('''
    <Page>:
        label_id: label_id
        Label:
            id: label_id
            text: str(id(root))
    
    <Carousel>
        on_current_slide: print(args[1].label_id.text)
    ''')
    
    class Page(BoxLayout):
        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()