【问题标题】:Kivy Event on carousel when slide change幻灯片更改时轮播上的 Kivy 事件
【发布时间】:2014-08-29 13:20:16
【问题描述】:

我不知道如何解决我的问题。

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

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

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

就像轮播的文档一样,我在幻灯片更改时找不到事件。最好有事件来获取当前幻灯片索引。

你有什么想法吗?

谢谢,

【问题讨论】:

    标签: python carousel kivy


    【解决方案1】:

    你可以观察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()
    

    【讨论】:

    • on_index 很棒。你在哪里找到这个的?我在文档中的任何地方都看不到它。
    • @JohnBaber-Lucero, index 是描述here 的属性,对于任何属性,您可以定义on_&lt;PROPERTY NAME&gt; 方法来观察其变化。有关更多参考,请参阅here。这就是 Kivy 属性如此有用的原因。
    • 我发现on_indexon_current_slide都不起作用。还有其他解决方案吗?
    【解决方案2】:

    如果您想要一个纯 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)
    
    

    【讨论】:

      猜你喜欢
      • 2019-09-27
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2019-09-08
      • 2018-01-24
      相关资源
      最近更新 更多