Kivy轮播切换时的事件
我对解决我的问题没有任何头绪。
我做了一个应用程序,里面有一个轮播组件。在这个轮播里,我有4个幻灯片:欢迎幻灯片 -> DVD幻灯片 -> DVD预览幻灯片 -> 分类幻灯片。我为每个幻灯片都创建了一个类。
我使用了一个列表适配器来显示从Sqlite3数据库提取的数据。
我遇到的问题是关于列表的刷新。当我在DVD幻灯片中修改一个DVD(比如给预览添加名字)时,当我滑动到DVD预览幻灯片时,DVD并没有出现,因为列表没有刷新。
根据轮播的文档,我找不到滑动变化时的事件。如果有一个事件可以获取当前幻灯片的索引,那就太好了。
你有什么想法吗?
谢谢,
2 个回答
0
如果你想要一个纯Python的解决方案,而不是使用Kivy语言的方案,你可以自己创建一个轮播图(carousel),这个轮播图可以继承自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)
6
你可以观察 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()