Serial86
Serial86

Reputation: 105

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,

Upvotes: 3

Views: 2542

Answers (2)

Mark Kortink
Mark Kortink

Reputation: 2120

If you want a pure python solution rather than a Kivy Language solution you can create your own carousel that inherits from the Kivy carousel as follows.

import kivy      
from kivy.uix.carousel import Carousel 

class MyCarousel(Carousel):
    # This class is a carousel that runs script
    # when a slide gets focus (except first load).
    def on_index(self, *args):
        print('the slide is', self.index)
        # YOUR CODE GOES HERE
        Carousel.on_index(self, *args)

Upvotes: 0

Nykakin
Nykakin

Reputation: 8747

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()

Upvotes: 6

Related Questions