这是一个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应用程序而不是一起下载所有图像;旋转木马的第一张幻灯片应该只下载第一张图片,当我们向左或向右滑动时,相应的幻灯片图片应该下载。
答案 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()