幻灯片更改时,旋转木马上的Kivy事件

时间:2014-08-29 13:20:16

标签: python carousel kivy

我无意找到解决问题的方法。

我已经使用Carousel Widget制作了一个应用程序。在这个转盘我有4张幻灯片。 welcomeSlide - > DVDSlide - > DVDPretSlide - > CategorySlide 我为每张幻灯片制作了一个课程。

我使用ListAdpter来显示从Sqlite3数据库中提取的数据。

我的问题是关于刷新列表,当我在DVDSlide中修改DVD(添加名称为pret)时,当我滑到DVDPret时,DVD没有出现,因为列表没有刷新。

就像旋转木马的文档一样,我在幻灯片更改时找不到该事件。如果存在获取当前幻灯片索引的事件,那将是最好的。

你有什么想法吗?

谢谢,

2 个答案:

答案 0 :(得分:5)

您可以观察index属性:

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

或者您可以观察current_slide属性:

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

答案 1 :(得分:0)

如果您要使用纯python解决方案而不是Kivy语言解决方案,则可以创建自己的继承自Kivy轮播的轮播,如下所示。

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)

相关问题