如何在相应的轮播幻灯片处于活动状态时加载图像?

时间:2017-07-15 13:46:50

标签: python kivy carousel

这是一个kivy python脚本,我在网上找到了我想要复制的旋转木马。

from kivy.app import App
from kivy.uix.carousel import Carousel
from kivy.factory import Factory
from kivy.uix.image import Image


class Example1(App):

    def build(self):
        carousel = Carousel(direction='right',loop='true')

        for i in range(1,5):
            src = "http://placehold.it/480x270.png&text=slide-%d&.png" % i
            #load images asynchronously
            image = Factory.AsyncImage(source=src, allow_stretch=True)          
            carousel.add_widget(image)
            print(i)
        return carousel

if __name__ == '__main__':
    Example1().run()

这会立即下载所有图像,适用于较小尺寸和较少数量的图像。当我在其他更大数量的图像中尝试它时,尺寸相当大。花了很长时间甚至将这些图像加载到kivy应用程序。

有没有办法可以逐个加载图片?说我们运行kivy应用程序而不是一起下载所有图像;旋转木马的第一张幻灯片应该只下载第一张图片,当我们向左或向右滑动时,相应的幻灯片图片应该下载。

1 个答案:

答案 0 :(得分:1)

您可以创建自定义生成器函数,以在调用时加载上一张或下一张幻灯片,然后下载或加载相应的图像。这是我的应用程序中的一个脚本,它每3秒后自动更改一次屏幕,但我手动创建了我的kv文件中的轮播,而不是从远程源调用它们。

from kivy.uix.screenmanager import Screen
from kivy.properties import ObjectProperty
import threading
from kivy.clock import Clock

class StartScreen(Screen):
    ml = ObjectProperty(None)
    scroller = ObjectProperty(None)
    button = ObjectProperty(None)
    carousel = ObjectProperty(None)

    def caller(self):
        threading.Thread(target = self.call).start()

    def call(self):
        Clock.schedule_interval(self.changer, 3)

    def changer(self,*args):
        self.ids.carousel.load_next()